原文:https://blog.csdn.net/u010139869/article/details/79449315
隨筆稍作修改,把繼承方法QDialog改為了QMainWindow
關鍵部分:重寫QtWidgets.QMainWindow的closeEvent方法
# 重寫closeEvent方法,實現dialog窗體關閉時執行一些代碼 from PyQt5 import QtCore, QtGui, QtWidgets import sys class Dialog(QtWidgets.QMainWindow): def get_thread(self, main_thread): self.main_thread = main_thread 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() sys.exit(0) else: event.ignore()
完整代碼
# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'dialog.ui' # # Created by: PyQt5 UI code generator 5.10.1 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets import sys class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(640, 480) self.pushButton = QtWidgets.QPushButton(Dialog) self.pushButton.setGeometry(QtCore.QRect(370, 80, 113, 32)) self.pushButton.setObjectName("pushButton") self.lineEdit = QtWidgets.QLineEdit(Dialog) self.lineEdit.setGeometry(QtCore.QRect(140, 80, 113, 21)) self.lineEdit.setObjectName("lineEdit") self.textBrowser = QtWidgets.QTextBrowser(Dialog) self.textBrowser.setGeometry(QtCore.QRect(180, 200, 256, 192)) self.textBrowser.setObjectName("textBrowser") self.label = QtWidgets.QLabel(Dialog) self.label.setGeometry(QtCore.QRect(30, 80, 111, 16)) self.label.setObjectName("label") self.label_2 = QtWidgets.QLabel(Dialog) self.label_2.setGeometry(QtCore.QRect(30, 220, 141, 16)) self.label_2.setObjectName("label_2") self.retranslateUi(Dialog) QtCore.QMetaObject.connectSlotsByName(Dialog) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_translate("Dialog", "Dialog")) self.pushButton.setText(_translate("Dialog", "PushButton")) self.label.setText(_translate("Dialog", "這是Line Edit ->")) self.label_2.setText(_translate("Dialog", "這是Text Browser ->")) class Dialog(QtWidgets.QMainWindow): """對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() def main(): """ 主函數,用於運行程序 :return: None """ app = QtWidgets.QApplication(sys.argv) dialog = Dialog() # 注意修改為了自己重寫的Dialog類 ui = Ui_Dialog() ui.setupUi(dialog) dialog.show() # 顯示了自己重寫的Dialog類 sys.exit(app.exec_()) if __name__ == '__main__': main()