2017-08-21 16 views
0
class Ui_MainWindow(QtGui.QMainWindow): 
    def __init__(self): 
     QtGui.QMainWindow.__init__(self) 
     app.atexit.connect(self.exitApp) 

    def exitApp(self): 
     atexit.register(self.exitApp(app)) 
     ret = QtGui.QMessageBox.question(None, 'Close request', 'Are you sure you want to quit?', 
             QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, 
             QtGui.QMessageBox.Yes) 
     if ret == QtGui.QMessageBox.Yes: 
      sys.exit(app.exec()) 
     elif ret == QtGui.QMessageBox.No: 
      pass 

    def setupUi(self, MainWindow): 
     MainWindow.setObjectName(_fromUtf8("MainWindow")) 
     MainWindow.resize(1280, 760) 
     MainWindow.setMaximumSize(QtCore.QSize(16777215, 16777215)) 

def main(): 
    MainWindow = QtGui.QMainWindow() 
    ui = Ui_MainWindow() 
    ui.setupUi(MainWindow) 
    MainWindow.showMaximized() 
    Ui_MainWindow.loadData(ui) 
    sys.exit(app.exec_()) 

if __name__ == "__main__": 
    app = QtGui.QApplication(sys.argv) 
    main() 

"あなたは終了してもよろしいですか?"というメッセージボックスを表示します。ユーザーがWindowsの閉じるボタン(上のXボタン)をクリックしたとき。Windows X閉じるボタンが押されたときにメッセージボックスを表示する(PyQt4 Python)

ユーザーがボタンをクリックすると、どのように信号が得られますか?

解決策はおそらくDetect when the "x" or close button is pressedに似ていますが、私はPyQt4を使用しています。

答えて

1

ウィンドウを閉じる必要がない場合は、closeEventメソッドを上書きしてイベントを無視する必要があります。私はそれを再現することに問題があったので、あなたのコードを少し修正しました。

class MainWindow(QtGui.QMainWindow): 
    def __init__(self): 
     QtGui.QMainWindow.__init__(self) 

    def closeEvent(self, event): 
     ret = QtGui.QMessageBox.question(None, 'Close request', 'Are you sure you want to quit?', 
             QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, 
             QtGui.QMessageBox.Yes) 
     if ret == QtGui.QMessageBox.Yes: 
      QtGui.QMainWindow.closeEvent(self, event) 
     else: 
      event.ignore() 


if __name__ == "__main__": 
    app = QtGui.QApplication(sys.argv) 
    ui = MainWindow() 
    ui.show() 
    sys.exit(app.exec_()) 
+0

私のためには機能しませんでした。私はPythonを閉じて、メッセージボックスは表示されません。私の質問に応答してくれてありがとう@eyllanesc私はあなたが以前私の質問のいくつかに答えていることに気づいた。 – lloydyu24

+0

コードとUIがどのように構成されているかには多分問題があります。 ui.show()を追加すると、内容のない小さなウィンドウが表示されます。閉じようとすると、メッセージボックスは表示されますが、システムを含むメインウィンドウでは表示されません。 – lloydyu24

+0

閉じるボタンを押したときに出力される信号はありませんが、ウィンドウは閉じます。完全なコードを表示してそれに適応させることができます。また、github、ドライブ、ドロップボックスなどで共有することもできます。 – eyllanesc

関連する問題