2015-02-17 4 views
1

Я пытаюсь запустить диалоговое окно внутри активного окна приложения. Сложность, с которой я сталкиваюсь, заключается в возможности взаимодействовать с окном активного приложения после запуска диалогового окна.Запуск диалога pyside внутри активного окна приложения

Вот пример моего питона сценария:

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 ждать, пока диалоговое окно не будет закрыто, прежде чем продолжить читать остальную часть моего кода?

ответ

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 сигнала диалога. Однако, если вы подходите к нему таким образом, ваш код будет выполняться после закрытия диалога, а не позволяет закрыть его, когда вы сочтете нужным (или, скажем, оставить его открытым, если что-то пойдет не так в остальной части вашего кода).

Смежные вопросы