我试图在活动的应用程序窗口中启动一个对话框窗口。我面临的困难是,一旦启动对话窗口,就可以与活动的应用程序窗口进行交互。
以下是我的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等到对话框窗口关闭,然后再继续阅读我的其余代码?
答案 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}}信号。但是,如果你以这种方式接近它,你的代码将在对话框关闭后执行,而不是允许你在你认为合适时关闭它(或者说,如果其他代码出现问题则保持打开状态)。