在活动的应用程序窗口中启动一个pyside对话框

时间:2015-02-17 16:08:42

标签: python qt pyside nuke

我试图在活动的应用程序窗口中启动一个对话框窗口。我面临的困难是,一旦启动对话窗口,就可以与活动的应用程序窗口进行交互。

以下是我的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())

启动此对话框窗口时,我熟悉两个选项:

dialog.show()

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

dialog.exec_()

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

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

1 个答案:

答案 0 :(得分: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()函数/方法附加到对话框的{{ 1}}信号。但是,如果你以这种方式接近它,你的代码将在对话框关闭后执行,而不是允许你在你认为合适时关闭它(或者说,如果其他代码出现问题则保持打开状态)。