python之pyqt专栏11-事件(QEvent)

QApplication.exec()

        在main.py中,实例化app对象,然后在 sys.exit(app.exec())中调用app.exec(),

if __name__ == '__main__':
    # 实例化应用
    app = QApplication(sys.argv)
    # 实例化MyMainForm
    myw = MyMainForm()
    myw.show()
    # 启动应用程序的事件循环并等待用户交互,直到应用程序关闭。
    sys.exit(app.exec())

        当调用app.exec()时,进入主函数事件循环并且等待exit()调用。当exit()被调用时,app.exec()的返回值会被exit() 设置。

         exec()函数的逻辑结构伪代码

def exec():
    while True:
        #main events loop
        pass
    
    return  exit()

         主要事件循环从窗口系统接收事件,然后将这些事件分发到应用程序小部件。  部件通过被调用它们的 event() 函数来接收事件。

QObject.event()

              QWidget继承于QObjectQObject在里面有event函数的描述,用户可以重写event 

QEvent 

        在QEvent有两个函数常用到,也就是accept()和 ignore(),设置事件接收器是否接收或者清除事件标志,默认QEvent被设置为“accept”标志

     

需求

        实现点击窗口的“X”按钮,关闭不了窗口

方法一:重写event函数
    def event(self, a0):
        if(a0.type()==QEvent.Type.Close):
            a0.ignore()
            return True #一定要加上否者会出错
        else:
            return super().event(a0)  # 调用基类的 event() 函数处理其他事件

        注event,需要有返回值否者会出错。 

方法二:重写closeEvent函数
    # # 重写event事件
    def closeEvent(self, a0):
            print("widget, close event")
            a0.ignore()

实现

 

event与closeEvent函数的关系

    # # 重写event事件
    def closeEvent(self, a0):
            print(f"{a0.type()}, closeEvent")


    def event(self, a0):
        if(a0.type()==QEvent.Type.Close):
            print("event")
            super().event(a0)
            return True #一定要加上否者会出错
        else:
            return super().event(a0)  # 调用基类的 event() 函数处理其他事件

          在上面的代码执行中,可以看到先执行event,在再执行closeEventevent调用了父类的eventQEvent按照之前的路径传递。QEvent会被传递到closeEvent,这时a0.type()只有一个类型。

        因此当事件类型 = QEvent.Type.Close,无论是event中清除标记(调用a0.ignore()),还是在closeEvent清除标记(调用a0.ignore()),都是清除一样的标记。

    

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/215409.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android 手机的高级终端 Termux 安装使用、busybox、安卓 手机 web

From:https://www.sqlsec.com/2018/05/termux.html Termux 高级终端安装使用配置教程 :https://www.cnblogs.com/cutesnow/p/11430833.html 神器Termux 的使用记录:https://cloud.tencent.com/developer/article/1609398 ​adb shell 下使用 …

运维02:Linux

Linux安装 VMWare安装:夸克网盘分享(提取码:refg) CentOS安装:Index of /centos/7.9.2009/isos/x86_64/ Xshell安装:百度网盘 请输入提取码(提取码:juau) 环境准备 1、…

构建满足流批数据质量监控用火山引擎DataLeap

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 面对今日头条、抖音等不同产品线的复杂数据质量场景,火山引擎 DataLeap 数据质量平台如何满足多样的需求?本文将介绍我们在弥合大数据场景下…

IDA常用操作、快捷键总结以及使用技巧

先贴一张官方的图,然后我再总结一下,用的频率比较高的会做一些简单标注 快捷键 F系列【主要是调试状态的处理】 F2 添加/删除断点F4 运行到光标所在位置F5 反汇编F7 单步步入F8 单步跳过F9 持续运行直到输入/断点/结束 shift系列【主要是调出对应的页…

完美解决:wget命令下载时遇到“错误 308:Permanent Redirect。”

目录 1 问题 2 解决方法 1 问题 使用wget命令下载时候遇到: --2023-12-02 20:36:08-- http://mirrors.jenkins.io/war-stable/latest/jenkins.war 正在解析主机 mirrors.jenkins.io (mirrors.jenkins.io)... 20.7.178.24, 2603:1030:408:5::15a 正在连接 mirror…

西南科技大学模拟电子技术实验七(集成运算放大器的非线性应用)预习报告

一、计算/设计过程 说明:本实验是验证性实验,计算预测验证结果。是设计性实验一定要从系统指标计算出元件参数过程,越详细越好。用公式输入法完成相关公式内容,不得贴手写图片。(注意:从抽象公式直接得出结果,不得分,页数可根据内容调整) 预习计算内容根据运放的非线…

酵母双杂交服务专题(四)

关于酵母双杂交服务的常见问题 问题1:酵母双杂交的筛选流程? 研究者将特定基因作为钓饵,在一个精心挑选的cDNA文库中进行筛选,目的是找到与该钓饵蛋白发生相互作用的蛋白质。通过这种筛选,可以从阳性反应的酵母菌株中…

Matlab 生成license

参考下面两个帖子 https://ww2.mathworks.cn/matlabcentral/answers/389888-matlab https://www.mathworks.com/matlabcentral/answers/131749-id-id-id-id 登陆 https://ww2.mathworks.cn/licensecenter 针对R2020b版本,点击下面红框生成 ip addr | grep ether看第一行 根据…

【每日OJ —— 110. 平衡二叉树】

每日OJ —— 110. 平衡二叉树 1.题目:110. 平衡二叉树2.解法2.1.算法讲解2.2.代码实现2.3.提交通过展示 1.题目:110. 平衡二叉树 2.解法 2.1.算法讲解 1.这道题中的平衡二叉树的定义是:二叉树的每个节点的左右子树的高度差的绝对值不超过 11…

python动态圣诞下雪图

运行图片 代码 import pygame import random# 初始化Pygame pygame.init()# 创建窗口 width, height 800, 600 screen pygame.display.set_mode((width, height)) pygame.display.set_caption(Christmas Tree)# 定义颜色 GREEN (34, 139, 34) RED (255, 0, 0) WHITE (255…

YOLOv8创新魔改教程(二)如何添加注意力机制

YOLOv8创新魔改教程(二)如何添加注意力机制 (一)找代码 github找各种注意力机制的代码 (二)融合 1.创建文件 在ultralytics/nn/attention.py创建attention.py 文件 将找到的代码粘贴进来 2.修改task…

做外贸如何写开发信?外贸邮件营销怎么写?

外贸业务员写开发信的技巧?撰写客户开发信模板详解! 外贸经营是一项竞争激烈的行业,写好开发信是吸引客户、建立合作关系的重要一环。蜂邮EDM将为您详细介绍如何撰写出色的开发信,以吸引客户的眼球,引领他们与您建立联…

海翔云平台getylist_login.do接口 SQL注入漏洞复现 [附POC]

文章目录 海翔云平台getylist_login.do接口 SQL注入漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 海翔云平台getylist_login.do接口 SQL注入漏洞复现 [附POC] 0x01 前言 免责声明:请勿利用文章内…

flink安装与配置-脚本一键安装(超简单)

文章目录 前言使用shell脚本一键安装1. 复制脚本2. 增加执行权限3. 执行脚本4. 加载用户环境变量5. 浏览器访问 总结 前言 本文介绍了使用shell脚本一键安装和配置Apache Flink单机版的方法。通过复制并执行提供的安装脚本,可以自动下载、安装和配置Flink。脚本会检…

Canvas鼠标画线

鼠标按下开始画线,鼠标移动根据鼠标的轨迹去画,鼠标抬起停止画线 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">…

Go 程序编译过程(基于 Go1.21)

版本说明 Go 1.21 官方文档 Go 语言官方文档详细阐述了 Go 语言编译器的具体执行过程&#xff0c;Go1.21 版本可以看这个&#xff1a;https://github.com/golang/go/tree/release-branch.go1.21/src/cmd/compile 大致过程如下&#xff1a; 解析 (cmd/compile/internal/synt…

安装Python以及pycharm

Pycharm是编辑器。相当于Word对文字进行编辑。 Python是解释器。讲代码翻译为计算机可以理解的指令。 1、安装Python 官网&#xff1a;Welcome to Python.org 打开的时候有点慢等待一会就好&#xff0c;点击下载&#xff0c;选择Windows版本 等待一会&#xff0c;可以看到如…

上海亚商投顾:沪指探底回升 AI应用方向集体爆发

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 三大指数早间震荡调整&#xff0c;深成指盘中跌超1%&#xff0c;午后探底回升全线翻红&#xff0c;北证50指数…

重要通知丨JumpServer开源堡垒机V2社区版即将停止维护的通知

尊敬的JumpServer开源堡垒机用户&#xff1a;您好&#xff01; 如《关于JumpServer开源堡垒机V2版本产品生命周期的相关说明》所示&#xff0c;JumpServer开源堡垒机V2版本&#xff08;社区版&#xff09;将于2023年12月31日停止维护支持。 在过去两年多的时间里&#xff0c;…

降本增效,全渠道“一盘货”经营!商派OMS库存共享解决方案|徐礼昭

文&#xff1a;徐礼昭&#xff08;商派市场负责人、重构零售实验室负责人&#xff09; 多套OMS&#xff0c;多盘货经营引发种种问题 目前&#xff0c;中大型品牌企业实行多套OMS并行使用&#xff0c;多盘货分散经营的局面依然大量存在。这通常是因为企业内部多组织、多业务模式…