python - 等到 QtWidgets.QMainWindow 关闭后再继续

标签 python pyqt pyqt5

我有一个 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 信号将被触发,并调用连接的回调函数。
  • 关于python - 等到 QtWidgets.QMainWindow 关闭后再继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50029201/

    相关文章:

    python - 项目数较多的 QComboBox 初始显示性能缓慢

    python - 将复杂的 SQL 查询转换为 SQLAlchemy

    python - OpenCV:跟踪在 2D 平面中移动的 3D 对象

    python - Flask 脚本 windows 子进程和 sys

    python - 获取任何 QKeyEvent 键值的可打印名称

    python - `setData` 方法怎么会失败?

    python - 向 Python 字典中添加项目

    python - PyQt:QScrollArea 内小部件的环绕式布局

    qt - Qt 支持 'Open a folder and highlight a particular file' 吗?

    python - PyQt 将文件名传递给常用函数