PyQt学习随笔:应用中通过installEventFilter安装重写的eventFilter捕获应用事件的方法
eventFilter函数是直接从QObject继承的定义的事件刷选虚拟函数,如果一个对象A使用installEventFilter函数将另一个对象B安装了B的实例方法eventFilter,则这个对象B将会调用eventFilter进行事件刷选。
修订:上面这段话的描述有误,经过后期学习及测试,eventFilter方法无需是B本身的实例方法,只要是任何一个QObject派生类的eventFilter方法都可以,就是说,安装者、被监视对象以及eventFilter方法所在对象可以是三个独立对象。具体可参考《PyQt(Python+Qt)实现的GUI图形界面应用程序的事件捕获方法大全及对比分析》的详细介绍。
在实现eventFilter函数时,如果要筛选出事件停止进一步处理它,则返回True;否则返回False,如果不知道怎么处理,则调用父类eventFilter方法返回。
eventFilter语法
bool QObject.eventFilter(QObject watched, QEvent event)
其中:
1、watched就是被安装了eventFilter的对象;
2、event就是接收到的事件信息;
3、返回值为True则该事件不会再传递,否则会继续传递。
installEventFilter语法
installEventFilter(QObject filterObj)
其中:filterObj就是需要进行事件刷选的对象,该方法无返回值。
案例:
如果要在一个窗口中进行事件刷选,可以在该窗口自定义类中实现eventFilter方法,并在应用中安装该方法。
示例代码1:实现eventFilter方法
class winTest(QtWidgets.QMainWindow,Ui_wintest.Ui_MainWindow ):
def __init__(self):
super(winTest, self).__init__()
self.setupUi(self)
self.setWhatsThis("窗口属性设置测试")
def eventFilter(self, objwatched, event):
eventType = event.type()
flag = False
if eventType == QEvent.MouseButtonPress or eventType == QEvent.KeyPress:
print(f"***************In eventFilter:事件类型值={eventType},事件objwatched={objwatched}")
elif eventType == QtCore.QEvent.Close:
print(f"***************In eventFilter:事件类型值={eventType},事件objwatched={objwatched}")
showMessage(self, 'eventFilter警告',"系统将退出,是否确认?", QMessageBox.Yes |QMessageBox.No, QMessageBox.No)
return super().eventFilter(objwatched, event)
示例代码2:在主程序中给主窗口对象安装事件刷选
if __name__ == '__main__':
app = App(sys.argv)
w = winTest()
w.show()
app.installEventFilter(w)
sys.exit(app.exec_())
博客地址:https://blog.csdn.net/LaoYuanPython
老猿Python博客文章目录:https://blog.csdn.net/LaoYuanPython/article/details/98245036
PyQt学习随笔:应用中通过installEventFilter安装重写的eventFilter捕获应用事件的方法的更多相关文章
- PyQt学习随笔:Model/View中TableView视图数据项编辑结果及视图数据项的访问
按照<PyQt学习随笔:Model/View中设置视图数据项可编辑的方法>的方法支持视图数据可编辑后,编辑后的数据无需主动保存,PyQt会自动将界面变更的数据保存到对应的Model存储中, ...
- PyQt学习随笔:Model/View架构中多个视图之间选择数据项同步
我们知道多个视图之间通过使用相同的model就可以实现数据的共享(具体请参考< PyQt学习随笔:ListView控件的视图和数据模型分离案例>),除了数据的共享之外,多个视图之间还可以同 ...
- PyQt学习随笔:Model/View开发时在view数据项中设置不同角色数据的方法
在往Model中通过QStandardItem等类插入数据项时,除了实际插入的存储数据,还可以设置不同角色(请参考<PyQt学习随笔:Model/View中诸如DisplayRole的数据角色及 ...
- PyQt学习随笔:重写setData方法截获Model/View中视图数据项编辑的注意事项
根据<PyQt学习随笔:Model/View中视图数据项编辑变动实时获取变动数据的方法>可以重写从PyQt的Model类继承的setData方法来实时截获View中对数据的更改,但需要注意 ...
- PyQt学习随笔:Qt中Model/View中的怎么构造View匹配的Model
老猿Python博文目录 老猿Python博客地址 在<PyQt学习随笔:Qt中Model/View相关的主要类及继承关系>介绍了Model/View架构的主要类,在实际使用时,view相 ...
- PyQt学习随笔:Qt事件类QEvent详解
QEvent类是PyQt5.QtCore中定义的事件处理的基类,事件对象包含了事件对应的参数. <Python & PyQt学习随笔:PyQt主程序的基本框架>介绍了PyQt程序通 ...
- PyQt学习随笔:QTableWidget的selectedRanges、setRangeSelected访问选中矩形范围的方法
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在QTableWidget对项的操作支持选中多个项的情况下,可以通过方法selectedRanges ...
- PyQt学习随笔:Model和View之间的数据互动过程
在<PyQt学习随笔:Qt中tem Views(Model-Based)和Item Widgets(Item-Based)控件的用途和关系>中介绍了,Model用于存储数据,View用于展 ...
- PyQt学习随笔:Qt Designer调用帮助时报错找不到assistant.exe文件的解决办法
老猿是按照<第15.5节 PyQt5安装与配置>步骤安装的PyQt及相关工具,但最近在Qt Designer中点击帮助相关菜单时报错找不到assistant.exe文件,如图: 按照报错信 ...
随机推荐
- python编写实现抽奖器
这篇文章主要为大家详细介绍了python编写实现抽奖器,文中代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 # coding=utf-8 import sys import os ...
- 鸿蒙开发板外设控制 之 实现物理按键的“长按事件”(按键通用框架 V0.0.2)
我在之前的帖子<实现按键"按下事件"和"释放事件"的通用框架(V0.0.1)>中阐述了DTButton-V0.0.1的设计思路,并且也在帖子中开源了 ...
- 【开发板试用报告】鸿蒙OS环境搭建及代码烧录
鸿蒙系统的代码编译环境需要linux系统,软件开发和代码烧录需要windows环境. Linux环境 参考官方链接:https://gitee.com/openharmony/docs/blob/ma ...
- 快速了解阿里微服务热门开源分布式事务框架——Seata
一.Seata 概述 Seata 是 Simple Extensible Autonomous Transaction Architecture 的简写,由 feascar 改名而来. Seata 是 ...
- Python之Matplot——01.堆叠柱状图的绘制
1.Matplotlib是python的一个绘图库,可以方便的绘制各种图标,是数据可视化的利器. 2.本文我就给大家介绍一下条形图或者说柱状图的绘制 3.代码如下: <1>首先导入模块 1 ...
- IP 层收发报文简要剖析4--ip 报文发送
无论是从本地输出的数据还是转发的数据报文,经过路由后都要输出到网络设备,而输出到网络设备的接口就是dst_output(output)函数 路由的时候,dst_output函数设置为ip_output ...
- HashMap 链表插入方式 → 头插为何改成尾插 ?
开心一刻 一天,楼主在路上碰到了一个很久没见的朋友,找了个餐馆,坐下聊了起来 楼主:在哪上班了 ? 朋友:火葬场啊 楼主:在那上班,一个月多少钱啊 ? 朋友:两万多啊 楼主(不可思议):多少 ? 朋友 ...
- rocketmq详解-[个人版]-第一章
一.消息队列概述 1.1.消息队列由来 在运维场景中,我们经常会存在如下场景:一旦出现S1异常,C1将因为S1的影响而异常(C为客户端,s为服务端) 当然可以通过添加多个S的方式,实现高可用.但这样会 ...
- 去年去阿里面试,被问到ArrayList和LinkedList,我是这样回答的!
前言 在一开始基础面的时候,很多面试官可能会问List集合一些基础知识,比如: ArrayList默认大小是多少,是如何扩容的? ArrayList和LinkedList的底层数据结构是什么? Arr ...
- Mac专用下载器Folx软件中有没有“下载速度控制”功能
Mac专用下载器Folx软件不仅下载速度快,功能多,而且也可以实现下载上传速度控制的功能.下面小编将在Mac系统平台上,使用Folx 5版本,向大家全面介绍下Folx这款下载软件的速度控制功能,其中包 ...