当前位置: 首页 > news >正文

pyside6 qt 事件循环

文章目录

  • pyside6 qt 事件循环
    • `gui_app.exec()` 的作用
      • 1. 启动 Qt 事件循环
      • 2. 窗口显示的前提
    • 项目中完整的执行调用链
    • 为什么窗口需要事件循环才能显示?
      • Qt 的工作原理
    • 总结
      • 关键代码位置

pyside6 qt 事件循环

gui_app.exec() 的作用

    sys.exit(gui_app.exec())

gui_app.exec() 不创建窗口,它的作用是:

1. 启动 Qt 事件循环

gui_app.exec()  # 启动事件循环,阻塞主线程

功能:

  • 处理 GUI 事件(鼠标、键盘、窗口重绘等)
  • 使窗口能够显示和响应交互
  • 阻塞主线程,直到窗口关闭

2. 窗口显示的前提

窗口能真正显示的前提:

  1. 窗口对象已创建(UI()
  2. 已调用显示方法(showMaximized()
  3. 事件循环已启动(gui_app.exec()

项目中完整的执行调用链

程序启动↓
执行模块级别代码├─> gui_app = QApplication(sys.argv)  ← 创建 Qt 应用对象└─> logger = create_logger(__name__)↓
执行 if __name__ == '__main__' 代码块↓
导入 main_modulefrom module.main_module import main_module↓
执行 module/main_module.py 末尾代码main_module = Main_module()  ← 这里!↓
执行 Main_module.__init__()self.ui = UI()  ← 创建窗口对象↓
执行 UI.__init__()super(UI, self).__init__()  ← 调用 QMainWindow.__init__()self.setupUi(self)          ← 加载 UI 文件self.showMaximized()        ← 显示窗口(但此时还没真正显示)↓
继续执行其他代码start_thread(...)  ← 启动各种后台线程↓
执行 gui_app.exec()  ← 启动事件循环↓
【窗口真正显示出来】↓
事件循环运行- 处理鼠标事件- 处理键盘事件- 处理窗口重绘- 处理信号槽连接↓
程序运行直到窗口关闭

为什么窗口需要事件循环才能显示?

Qt 的工作原理

创建窗口对象↓
调用 show() 或 showMaximized()↓ 此时窗口只是"标记为显示",但还没有真正显示
启动事件循环 gui_app.exec()↓
事件循环处理显示事件↓
窗口真正显示在屏幕上

如果没有 gui_app.exec()

  • 窗口对象已创建
  • showMaximized() 已调用
  • 但窗口不会显示(因为没有事件循环处理显示事件)
  • 程序会立即退出

总结

  • 窗口创建:在 main_module = Main_module() 时,Main_module.__init__() 中创建 self.ui = UI()
  • 窗口显示:在 UI.__init__() 中调用 self.showMaximized()
  • 事件循环:gui_app.exec() 启动事件循环,使窗口能够显示和响应事件

关键代码位置

# 1. 创建窗口(在 module/main_module.py)
main_module = Main_module()  # → self.ui = UI()# 2. 显示窗口(在 ui_function/ui_module.py)
self.showMaximized()  # UI.__init__() 中# 3. 启动事件循环(在 gf_prewd.py)
gui_app.exec()  # 使窗口真正显示和响应事件
http://www.dtcms.com/a/560855.html

相关文章:

  • Secertpad搭建
  • 吞吐量、延迟、内存:深入理解垃圾回收的“三元悖论”
  • List接口和常用方法
  • 计算机一级考试网站怎么做用织梦系统做网站产权
  • Java 数据结构第二十八期:反射、枚举以及 lambda 表达式
  • Linux 磁盘分区与系统监控完全指南
  • 是普通网站地图好还是rss地图好一点网站建设申请费用
  • 使用Graphics2D创建滑块验证码
  • Flutter provide框架内部实现原理刨析
  • 关于rpm,yum,apt
  • 15.6.Bat脚本编写
  • 景德镇网站制作广告法
  • 可以做头像的网站网站区域名是什么
  • 新手记录使用uniapp-x开发鸿蒙应用
  • Linux+Apache+MySQL+PHP 架构下搭建 Discuz 社区论坛
  • 可替代Github Copilot的插件分享CodeGeeX
  • Ubuntu学习笔记
  • 双非大学生自学鸿蒙5.0零基础入门到项目实战 - 歌曲列表
  • 双非大学生自学鸿蒙5.0零基础入门到项目实战 -ArkTs核心
  • UVa 10989 Bomb Divide and Conquer
  • 【Linux】版本控制器Git和调试器—gdb/cgdb的使用
  • 怎么把个人做的网站上传到网上wordpress用户名钩子
  • 成都网站排名网站添加邮件发送怎么做
  • Spring AI 极简入门:15分钟集成AI到SpringBoot应用
  • 临潼城市建设局网站外资公司注册
  • 1.基础--数据库相关概念
  • 使用DTS迁移工具迁移oracle到DM
  • langchain agent的短期记忆
  • 使用DrissionPage和自动化技术实现得物鞋子信息爬取
  • 做网站的是干嘛的为网站添加统计