PySide6中重写的closeEvent关闭事件不触发,该如何修复?
PySide6 closeEvent不触发修复方案
你写的closeEvent核心逻辑是正确的,触发失败通常由以下几个原因导致,按优先级排查即可:
- 补全缺失的依赖导入
你当前贴出的代码缺少PySide6相关组件和sys库的导入,缺失导入会导致事件函数初始化失败,无法触发。在代码顶部补充导入语句即可:
import sys from PySide6.QtWidgets import QMainWindow, QMessageBox, QApplication from ui_mainwindow import Ui_MainWindow
- 检查UI文件的关闭按钮绑定逻辑
如果在Qt Designer中给主窗口的关闭按钮单独绑定了QApplication.quit()之类的直接退出槽函数,会绕开主窗口默认的closeEvent流程。你需要取消这个自定义绑定,确保点击关闭按钮时调用的是主窗口的close()方法,才能触发你重写的closeEvent。 - 适配自定义无边框窗口场景
如果你用了无边框窗口自定义标题栏,自己做的关闭按钮需要绑定到self.close(),不能直接调用app.quit(),否则不会触发closeEvent。
修正后完整可运行代码如下:
import sys from PySide6.QtWidgets import QMainWindow, QMessageBox, QApplication from ui_mainwindow import Ui_MainWindow class MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() self.ui = Ui_MainWindow() self.ui.setupUi(self) def closeEvent(self, event): reply = QMessageBox.question(self, '提示', "你确定要退出吗?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if reply == QMessageBox.Yes: event.accept() else: event.ignore() if __name__ == '__main__': app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec())
内容的提问来源于stack exchange,提问作者HAMARU
相关产品推荐
相关产品推荐

