侧边栏壁纸
博主头像
fynn博主等级

我们应该有恒心,尤其是要有自信心,必须相信自己是有能力的,而且要不惜任何代价把这种能力发挥出来。

  • 累计撰写 51 篇文章
  • 累计创建 21 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

PyQt5 对closeEvent()重写,添加关闭窗口触发的事件

fynn
2022-11-02 / 0 评论 / 0 点赞 / 5,917 阅读 / 339 字 / 正在检测是否收录...
  • 对.ui文件生成的代码修改: 分析启动函数
if __name__ == '__main__':
    win = QApplication(sys.argv)
    MainWindow = QMainWindow()
    ui = Ui_MainWindow()  # 正常的窗口
    ui.setupUi(MainWindow )  


    MainWindow.show()  # 显示窗口
    sys.exit(win.exec_())

从main()方法中看到我们最终显示的是QDialog类创建的窗口对象,如果想要实现关闭窗口触发弹窗提示或执行一些其他方法,需要重写的是QDialog类中的closeEvent()方法,而不是重写我们创建的Ui_Dialog类的closeEvent()方法。 原理:关闭窗口时会执行类的close()方法,并触发QCloseEvent信号,进而执行closeEvent(self, QCloseEvent)方法。 添加代码如下:

class Dialog(QtWidgets.QDialog):
    """对QDialog类重写,实现一些功能"""

    def closeEvent(self, event):
        """
        重写closeEvent方法,实现dialog窗体关闭时执行一些代码
        :param event: close()触发的事件
        :return: None
        """
        reply = QtWidgets.QMessageBox.question(self,
                                               '本程序',
                                               "是否要退出程序?",
                                               QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No,
                                               QtWidgets.QMessageBox.No)
        if reply == QtWidgets.QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()
  • 修改启动函数
if __name__ == '__main__':
    win = QApplication(sys.argv)
    MainWindow = QMainWindow()

    dialog = Dialog()  # 创建一个QDialog窗口对象,

    ui = Ui_MainWindow()  # 正常的窗口
    ui.setupUi(dialog)  # 将布局传入QDialog窗口

    dialog.show()  # 显示窗口

    # MainWindow.show()  # 显示窗口
    sys.exit(win.exec_())
0

评论区