3

ユーザーに質問するダイアログ ボックスを含む 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)
4

4 に答える 4

1

コード内で新しいQApplicationオブジェクトを作成するべきではありません。そのオブジェクトを破棄するとアプリケーションが閉じられることに驚きはありません。

于 2013-03-28T06:10:34.460 に答える
0

コードは次のようになります。

#!/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_())
于 2013-03-26T10:47:49.660 に答える