pyside6 qt 事件循环

文章目录

pyside6 qt 事件循环

gui_app.exec() 的作用

43:43:gf_prewd.py 复制代码
    sys.exit(gui_app.exec())

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

1. 启动 Qt 事件循环

python 复制代码
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_module
    from 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() 启动事件循环,使窗口能够显示和响应事件

关键代码位置

python 复制代码
# 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()  # 使窗口真正显示和响应事件
相关推荐
Boilermaker19926 小时前
[Java 并发编程] Synchronized 锁升级
java·开发语言
MM_MS6 小时前
Halcon变量控制类型、数据类型转换、字符串格式化、元组操作
开发语言·人工智能·深度学习·算法·目标检测·计算机视觉·视觉检测
꧁Q༒ོγ꧂7 小时前
LaTeX 语法入门指南
开发语言·latex
njsgcs7 小时前
ue python二次开发启动教程+ 导入fbx到指定文件夹
开发语言·python·unreal engine·ue
alonewolf_997 小时前
JDK17新特性全面解析:从语法革新到模块化革命
java·开发语言·jvm·jdk
古城小栈7 小时前
Rust 迭代器产出的引用层数——分水岭
开发语言·rust
ghie90907 小时前
基于MATLAB的TLBO算法优化实现与改进
开发语言·算法·matlab
恋爱绝缘体17 小时前
2020重学C++重构你的C++知识体系
java·开发语言·c++·算法·junit
wuk9987 小时前
VSC优化算法MATLAB实现
开发语言·算法·matlab
AI小怪兽8 小时前
基于YOLOv13的汽车零件分割系统(Python源码+数据集+Pyside6界面)
开发语言·python·yolo·无人机