PyQT5里的事件过滤器installEventFilter和eventFilter

基于窗体(Widget)的应用程序都是事件(event)驱动的,最主要的是鼠标事件、键盘事件、绘制事件、。事件由抽象类QEvent表示,包括很多子类,QMouseEvent,QKeyEvent,QPaintEvent等。
QObject类event函数相当于事件的一个总入口,参数e是QEvent类型,可能为QMouseEvent,QKeyEvent,QPaintEvent等.

#event函数原型
event(self,e)#参数e是QEvent类型

QEvent类主要有三个接口函数:
accept():表示事件接受者接受此事件,对此事件进行处理,不会再传给上层容器
ignore():表示事件接受者忽略此事件,传给上层容器
type():返回事件的类型,是枚举类型QEvent.Type

installEventFilter指定控件的事件监测者,该方法无返回值。

installEventFilter(QObject filterObj)#原型,filterObj就是事件监测者
self.label.installEventFilter(self)#伪代码,self为label所在窗体,label上触发的事件会发送给窗体进行处理。

在这个函数中,根据watched的值来判断事件来自哪个被监测对象,根据event.type() 的值来判断事件类型,从而确定需要执行什么操作。

bool QObject.eventFilter(QObject watched, QEvent event)#原型,watched事件来自哪个被监测对象,event事件类型

我在程序中有这样一个应用,父窗口弹出一个非模态子对话框,如果回到父窗口中进行其他操作,则关闭非模态子对话框,下面是我的实现程序:

self.installEventFilter(self)#父窗口监测自己本身事件
    def eventFilter(self, widget, event):
        if event.type() == QtCore.QEvent.WindowActivate:#判断事件类型
            if self.isActiveWindow():#如果父窗口是当前活动窗口
                if self.keyboard is not None:  #如果self.keyboard没关闭,则关闭
                    self.keyboard.close()
        return False
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值