美文网首页
PyQt5编程(21):过滤事件

PyQt5编程(21):过滤事件

作者: 用电热毯烤猪 | 来源:发表于2018-01-01 21:43 被阅读0次
    事件在传输到组件之前可以被拦截。为此,需要从QObject派生一子类并重载eventFiiter (self, object, event)。通过object参数,获得控件对象;通过event参数,获取事件的相关信息。对于不同事件,object对象也不一致。MouseButtonPress事件的对象为QMouseEvent,而 KeyPress事件的对象为QKeyEvent。
    

    在 eventFiiter () 函数中,如果事件不再发到原目的地,返回True;否则,返回False。下面代码为拦截按下大写“B”按键的代码:
    class MyFilter(QtCore.QObject):
    def init(self, parent=None):
    QtCore.QObject.init(self, parent)
    def eventFilter(self, obj, e):
    if e.type() == QtCore.QEvent.KeyPress:
    if e.key() == QtCore.Qt.Key_B:
    print("The event from the key will not reach the component")
    return True
    return QtCore.QObject.eventFilter(self, obj, e)

     第二步为安装过滤器。以过滤对象为构造函数的参数创建此派生类的实例,然后以此实例为参数,调用对象的installEventFilter函数。下面为安装QLabel过滤器的例子:
    self.label.installEventFilter(MyFilter(self.label))
    

    一个对象可多次调用installEventFilter安装多个过滤器,最后安装的,最先被调用。也可将同一过滤器安装到不同的对象。通过eventFilter函数的第二个参数,可以获得产生事件的控件引用。
    调用removeEventFilter(Filter)删除已安装的过滤器。

    相关文章

      网友评论

          本文标题:PyQt5编程(21):过滤事件

          本文链接:https://www.haomeiwen.com/subject/mrrxnxtx.html