1.pyqt5事件过滤器的实现注意有两个方法。首先安装事件过滤器,然后重写eventFilter(self, a0: 'QObject', a1: 'QEvent') -> bool:方法。
eventfilter()Obj表示事件筛选器对象,它接收发送到此QObject对象的所有事件。筛选器可以停止事件,也可以将事件转发给此QObject对象。事件过滤器filterObj通过它的eventFilter()函数接收事件。
eventFilter()有返回值。如果返回true,表示事件过滤,不会发送到对象本身。
如果返回false,表示事件未过滤,会通过event()方法将事件分发到对象。
返回给基类进行处理,例:return super(Window,self).eventFilter(a0,a1)
示例,一个label,当鼠标进入时字变红色,背景为青色,鼠标离开时字变黑色,背景变黄色。
from PyQt5.Qt import *class Window(QWidget):def __init__(self):super().__init__()self.setWindowTitle("的学习")self.resize(500,500)self.setup_ui()self.red ='QLabel#label{color:#FF0000;background-color:cyan}'self.black ='QLabel#label{color:#000000;background-color:yellow;}'def setup_ui(self):self.label=QLabel(self)self.label.resize(50,30)self.label.setObjectName('label')self.label.installEventFilter(self) #给标签加载事件过滤器def eventFilter(self, a0: 'QObject', a1: 'QEvent') -> bool:if (a0==self.label):if (a1.type()==QEvent.Enter):self.label.setText('我是红色')self.label.setStyleSheet(self.red)return Trueelif(a1.type()==QEvent.Leave):self.label.setText('我是黑色')self.label.setStyleSheet(self.black)return Truereturn Falsereturn super(Window,self).eventFilter(a0,a1)if __name__ == '__main__':import sysapp=QApplication(sys.argv)win=Window()win.show()
如果不用事件过滤器,就不能实现鼠标进入和离开的功能。只能靠继承QLabel,然后重写鼠标进入,离开事件。如果在Qt设计师上使用该控件,就要在之前界面上的QLabel提升为我们现在定义的类。