自己做网站出口,wordpress 对话,文案策划网站,做国内打不开的网站吗写了一个感觉有些用的小玩具。 用于给控件添加阴影遮罩(强调主控件的同时屏蔽其余控件的点击) 自定义阴影遮罩Mask#xff1a;
from PyQt5.QtCore import QPoint,QRect,Qt,QPoint,QSize
from PyQt5.QtWidgets import QWidget,QLabel,QPushButton,QVBoxLayout
from PyQt5.QtGu…写了一个感觉有些用的小玩具。 用于给控件添加阴影遮罩(强调主控件的同时屏蔽其余控件的点击) 自定义阴影遮罩Mask
from PyQt5.QtCore import QPoint,QRect,Qt,QPoint,QSize
from PyQt5.QtWidgets import QWidget,QLabel,QPushButton,QVBoxLayout
from PyQt5.QtGui import QColor,QPainter,QBitmapclass Mask(QWidget):__excludeNone__colorNonedef __init__(self,parentNone,*exclude,colorQColor(0,0,0,128)):super().__init__(parent)self.__excludeset(exclude)self.__colorcolorself.show()def paintEvent(self,event):self.resize(self.parent().size())bitQBitmap(self.size())bit.fill(Qt.black)painter_bitQPainter(bit)for wid,offset in self.__Get_Offset().items():painter_bit.eraseRect(QRect(offset,wid.size()))painter_bit.end()painter_selfQPainter(self)painter_self.fillRect(0,0,self.size().width(),self.size().height(),self.__color)painter_self.end()self.setMask(bit)def __Get_Offset(self):record{}parent_selfself.parent()for widget in self.__exclude:if(not widget.isVisible()):continuewidwidgetparent_widwid.parent()offsetQPoint(0,0)while (True):offsetwid.pos()if(not parent_wid):breakif(parent_widparent_self):breakwidwid.parent()parent_widwid.parent()if(parent_wid):record[widget]offsetreturn record测试代码运行结果
import sys
from PyQt5.QtWidgets import QApplication
if __name____main__:app QApplication(sys.argv)lb_1QPushButton(ABCDE)lb_1.setStyleSheet(font-size:150px ; background-color:#FFFF00)lb_2QPushButton(PQRST)lb_2.setStyleSheet(font-size:150px ; background-color:#FF0000)lb_3QPushButton(XYZ,lb_2)lb_3.setStyleSheet(font-size:50px ; background-color:#00FFFF)winQWidget()vboxQVBoxLayout(win)vbox.addWidget(lb_1)vbox.addStretch(1)vbox.addWidget(lb_2)win.show()win.resize(800,400)# mskMask(win,lb_1,colorQColor(0,0,0,192))# mskMask(win,lb_1,lb_2,colorQColor(0,0,0,192))mskMask(win,lb_1,lb_3,colorQColor(0,0,0,192))# mskMask(lb_2,lb_1,lb_3,colorQColor(0,0,0,192))# msk.setParent(None)sys.exit(app.exec()) 说明
即用即贴这个Mask是个牛皮癣(因为设置了parent)执行语句msk.setParent(None)以删除遮罩遮罩是规则的矩形。奇形怪状的需要自己额外修改代码实现 未经个人同意不得私自转载。本文发布于CSDNhttps://blog.csdn.net/weixin_44733774/article/details/134587980