2017-10-10 59 views
1

我試圖將close key (red x)連接到函數(消息框)。我到目前爲止所嘗試的都不起作用;當我點擊close key (red x)時,我的代碼會凍結。沒有錯誤信息。PyQt5 - 如何將關閉鍵(紅色x)連接到函數

這裏是我的代碼:

from PyQt5 import QtCore, QtGui, QtWidgets 
from PyQt5.QtWidgets import QMainWindow, QMessageBox 
class Ui_MainWindow(QMainWindow): 
    def setupUi(self, MainWindow): 
     MainWindow.setObjectName("MainWindow") 
     MainWindow.setWindowModality(QtCore.Qt.NonModal) 
     MainWindow.resize(987, 746) 
     MainWindow.setMinimumSize(567, 456) 
     MainWindow.setMaximumSize(987, 746) 
     font = QtGui.QFont() 
     font.setPointSize(9) 
     MainWindow.setFont(font) 
     self.retranslateUi(MainWindow) 
     QtCore.QMetaObject.connectSlotsByName(MainWindow) 

    def retranslateUi(self, MainWindow): 
     _translate = QtCore.QCoreApplication.translate 
     MainWindow.setWindowTitle(_translate("MainWindow", "")) 

    def Exit(self): 
     reply = QMessageBox.question(self, 'Quit', 'Are You Sure to Quit?', QMessageBox.No| QMessageBox.Yes) 

if __name__ == "__main__": 
    import sys 
    app = QtWidgets.QApplication(sys.argv) 
    app.aboutToQuit.connect(Ui_MainWindow.Exit) 
    MainWindow = QtWidgets.QMainWindow() 
    MainWindow.show() 
    Ui = Ui_MainWindow() 
    Ui.setupUi(MainWindow) 
    sys.exit(app.exec_()) 

感謝。

回答

1

我不明白你爲什麼要創建一個類Ui_MainWindow但這裏是我會怎麼做你想要做的一個例子:

from PyQt5 import QtCore, QtGui, QtWidgets 
from PyQt5.QtWidgets import QMainWindow, QMessageBox 


class MainWindow(QMainWindow): 

    def __init__(self): 
     super().__init__() 
     self.setupUI() 

    def setupUI(self): 
     self.setObjectName("MainWindow") 
     self.setWindowModality(QtCore.Qt.NonModal) 
     self.resize(987, 746) 
     self.setMinimumSize(567, 456) 
     self.setMaximumSize(987, 746) 
     font = QtGui.QFont() 
     font.setPointSize(9) 
     self.setFont(font) 


    def closeEvent(self, event): 
     reply = QMessageBox.question(self, 'Quit', 'Are You Sure to Quit?', QMessageBox.No | QMessageBox.Yes) 
     if reply == QMessageBox.Yes: 
     event.accept() 
     else: 
     event.ignore() 


if __name__ == "__main__": 
    import sys 
    app = QtWidgets.QApplication(sys.argv) 
    mw = MainWindow() 
    mw.show() 
    sys.exit(app.exec_()) 
+0

非常感謝您的回答。我的代碼是由Qt Designer生成的。這就是'Ui_MainWindow'的原因。我嘗試從你的答案中用'super().__ init __()'插入類的__init__'構造函數,但是它並沒有完全解決我的問題。我的代碼現在不凍結,但它仍然不連接到消息框,它只是退出。 –

+0

這很簡單,2件事: - 你必須在你的班級有closeEvent功能。第二件事,顯示的窗口是MainWindow,但你想要處理的類是Ui_MainWindow。 – NewBieBR

+0

感謝您的回覆。我無法將您的答案應用於我的代碼,但它似乎不起作用。你可以請示例的方式來應用你的解決方案我的原始文章中的實際代碼,而不添加'def __init __(self):'? –