簡體   English   中英

PyQt對話框在退出時關閉整個應用程序

[英]PyQt dialog closes entire app on exit

我有一個PyQt向導,其中包含一個對話框,向用戶詢問一個問題。 此對話框是可選的,僅在用戶需要時使用。 按鈕發送信號,表明應用程序已接收並打開窗口。 我的問題是,當對話框關閉時,它會關閉整個應用程序。 如何確保關閉對話框后,主應用程序保持打開並運行? 這里是處理對話框的代碼:

def new_item(self):
    app = QtGui.QApplication(sys.argv)
    Dialog = QtGui.QDialog()
    ui = Ui_Dialog()
    ui.setupUi(Dialog)
    Dialog.exec_()

我嘗試添加“取消”按鈕以手動將其關閉,但結果是相同的,整個應用程序都關閉了。

QtCore.QObject.connect(self.cancel, QtCore.SIGNAL(_fromUtf8("clicked()")), Dialog.close)

您的代碼應如下所示:

#!/usr/bin/env python
#-*- coding:utf-8 -*-

from PyQt4 import QtGui, QtCore

class MyWindow(QtGui.QWidget):
    def __init__(self, parent=None):
        super(MyWindow, self).__init__(parent)

        self.dialog = QtGui.QMessageBox(self)
        self.dialog.setStandardButtons(QtGui.QMessageBox.Ok | QtGui.QMessageBox.Cancel)
        self.dialog.setIcon(QtGui.QMessageBox.Question)
        self.dialog.setText("Click on a button to continue.")

        self.pushButtonQuestion = QtGui.QPushButton(self)
        self.pushButtonQuestion.setText("Open a Dialog!")
        self.pushButtonQuestion.clicked.connect(self.on_pushButtonQuestion_clicked)

        self.layoutHorizontal = QtGui.QHBoxLayout(self)
        self.layoutHorizontal.addWidget(self.pushButtonQuestion)

    @QtCore.pyqtSlot()
    def on_pushButtonQuestion_clicked(self):
        result = self.dialog.exec_()

        if result == QtGui.QMessageBox.Ok:
            print "Dialog was accepted."

        elif result == QtGui.QMessageBox.Cancel:
            print "Dialog was rejected."

if __name__ == "__main__":
    import sys

    app = QtGui.QApplication(sys.argv)
    app.setApplicationName('MyWindow')

    main = MyWindow()
    main.show()

    sys.exit(app.exec_())

您不應該在代碼中創建新的QApplication對象,銷毀該對象將關閉應用程序也就不足為奇了。

嘗試使用Dialog.reject而不是Dialog.close

.close()方法與QMainWindow .reject()小部件一起使用, .reject()與QDialog一起使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM