我有一个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.您可以将对话框设置为模式对话框。在这种情况下,与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()信号。这样,对话框不必是模式对话框,您仍然可以与GUI的其余部分进行交互。当用户关闭对话框时,会触发finished信号并调用连接的回调函数。

10-05 22:42