1

我正在尝试在活动的应用程序窗口内启动一个对话窗口。我面临的困难是一旦启动对话窗口就能够与活动的应用程序窗口进行交互。

这是我的python脚本的一个例子:

class select_output_UI(QtGui.QDialog):

    def __init__(self, *args, **kwargs):
        super(select_output_UI, self).__init__(*args, **kwargs)

        # BUILD UI FROM FILE
        ui_file = QtCore.QFile("./select_output.ui")
        ui_file.open(QtCore.QFile.ReadOnly)
        self.myWidget = QtUiTools.QUiLoader().load(ui_file, self)
        ui_file.close()

        # SIGNALS
        self.myWidget.cancel_button.clicked.connect(self.cancel_button_pressed)

    def cancel_button_pressed(self):
        self.button_pressed = "CANCEL"
        self.close()

dialog = select_output_UI(QtGui.QApplication.activeWindow())

我熟悉启动此对话框窗口的 2 个选项:

dialog.show()

此选项允许我与活动的应用程序窗口进行交互,但此选项不会等待对话框窗口关闭,然后继续运行下面的任何代码。

dialog.exec_()

此选项不允许我与活动的应用程序窗口进行交互。但它所做的是等待对话窗口关闭,然后再继续执行其余代码。

有没有办法在对话框窗口启动时与应用程序窗口进行交互,并让 python 等到对话框窗口关闭,然后再继续阅读我的其余代码?

4

1 回答 1

0

听起来您想将对话框的“确定”(或“继续”、“继续”等)按钮连接到包含您要运行的其余代码的方法或函数。您可能希望它成为一种方法,因为我想其余代码将需要访问对话框上的一些小部件值。

例如:

class select_output_UI(QtGui.QDialog):
    def __init__(self, *args, **kwargs):
        super(select_output_UI, self).__init__(*args, **kwargs)

        # Load .ui file, etc...

        self.myWidget.ok_button.clicked.connect(self.do_work)
        self.myWidget.cancel_button.clicked.connect(self.reject)

    def do_work(self):
        print "I'm doing work!"
        # Do the work...
        self.accept()

dialog = select_output_UI(QtGui.QApplication.activeWindow())
dialog.show()

或者,您可以将“确定”和“取消”按钮分别连接到.accept().reject(),然后将您的do_work()函数/方法附加到对话框的accepted信号。但是,如果您以这种方式处理它,您的代码将在对话框关闭后执行,而不是允许您在认为合适时关闭它(或者说,如果其余代码出现问题,则将其保持打开状态)。

于 2015-02-19T07:05:56.477 回答