Дождитесь закрытия QtWidgets.QMainWindow, прежде чем продолжить - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть PyQt5 окно, которое откроет созданное мной диалоговое окно, в котором только что попросили пользователя что-то сделать и нажмите кнопку, которая закрывает окно.Два окна сделаны с class RenameDialog(QtWidgets.QMainWindow): и class Prog(QtWidgets.QMainWindow):.а в Prog у меня self.renameDialog = RenameDialog(self).В части кода у меня есть

self.renameDialog.show()
#Other code to run after renameDialog window is closed

Но это не работает, так как я не могу понять, как ждать, пока renameDialog не закроется.Я пытался поместить self.renameDialog.setWindowModality(QtCore.Qt.WindowModality) перед self.renameDialog.show(), и я пытался выяснить, как использовать .exec_(), но не знаю, где я могу использовать этот метод в этом контексте.Есть ли способ подождать, пока этот QtWidgets.QMainWindow будет скрыт или уничтожен, прежде чем продолжить код?

1 Ответ

0 голосов
/ 25 апреля 2018

У вас есть две возможности здесь.

1.Вы можете установить диалог как модальный.В этом случае любое другое взаимодействие с GUI блокируется, пока пользователь не закроет диалоговое окно.Только тогда код продолжается.Вам нужно наследовать от QDialog, чтобы это работало:

class RenameDialog(QDialog):
    # ...
    pass

class YourMainWindow(QMainWindow):
    def show_dlg(self):
        dlg = RenameDialog(self)
        res = dlg.exec()
        if res == QDialog.Accepted:
            print('Accepted')
        else:
            print('Rejected')
Подключитесь к сигналу закончено () вашего диалога.Таким образом, диалоговое окно не обязательно должно быть модальным, и вы все равно можете взаимодействовать с остальной частью вашего графического интерфейса.Когда пользователь закрывает диалоговое окно, срабатывает сигнал finished и вызывается связанная функция обратного вызова.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...