首页 > 解决方案 > 等到 QtWidgets.QMainWindow 关闭后再继续

问题描述

我有一个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)之前尝试过put self.renameDialog.show(),我试图弄清楚如何使用.exec_(),但不知道在这种情况下我可以在哪里使用这种方法。有没有办法等到它QtWidgets.QMainWindow被隐藏或销毁后再继续代码?

标签: pythonpyqtpyqt5

解决方案


这里有两种可能。

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')
  1. 连接到对话框的finished()信号。这样,对话框不必是模态的,您仍然可以与 GUI 的其余部分进行交互。当用户关闭对话框时,finished会触发信号并调用连接的回调函数。

推荐阅读