Qt 等待窗口关闭

Posted

技术标签:

【中文标题】Qt 等待窗口关闭【英文标题】:Qt wait for window to close 【发布时间】:2021-02-15 09:04:30 【问题描述】:

我正在编写一个 Python 的东西,我需要代码等待 Qt 完成,然后再继续。

import sys
from PyQt5 import QtWidgets, QtGui, QtCore

class Test():
    def __init__(self):
        self.open_qt()

    def open_qt(self):
        app = QtWidgets.QApplication(sys.argv)
        self.window = QtWidgets.QWidget() # I tried QDialog also

        btn = QtWidgets.QPushButton("press me")
        btn.clicked.connect(self.login)

        lay = QtWidgets.QVBoxLayout()
        lay.addWidget(btn)

        self.window.setLayout(lay)
        self.window.show()

        sys.exit(app.exec_())

    def login(self):
        print("logged in!")

print("before")
temp = Test()
print("after")

这打印为:

before
after
logged in!

或:

before
logged in!
(after never arrives even after closing the Qt window)

但我需要它是:

before
logged in!
after

【问题讨论】:

这很有趣。它在我的 PC 上的工作方式是 before 然后是 logged in!。但即使在我关闭应用程序后,我也没有得到after 打印。 其实我也有这个。我将它添加到示例中。 所以你想在 GUI 正确关闭后打印 after 语句(我不确定 我需要代码等待 Qt 完成后再继续)? 【参考方案1】:

好的,所以你的问题是sys.exit(app.exec_())open_qt(self) 方法的末尾:

sys.exit(app.exec_())这行代码的意思是应用关闭(执行)后,你也会立即调用sys.exit()函数。 sys.exit() 然后立即终止脚本,这样您的代码就不会到达 print("after") 语句。 将此部分改写为:app.exec_() 然后您将看到after 语句在您关闭GUI 后打印出来没有任何问题。

【讨论】:

感谢这正确解决了问题。但我对此还有一个额外的问题。我实际上在 Maya 中运行此代码。所以我不使用app = QtWidgets.QApplication(sys.argv)app.exec_() 行。那么如何让代码在 Maya 等其他应用程序中等待? 对不起,我对Maya一无所知。您也许可以为此提出一个后续问题? 好的,感谢您的帮助!这是同样有此问题的任何人的另一张票***.com/questions/66205937/…

以上是关于Qt 等待窗口关闭的主要内容,如果未能解决你的问题,请参考以下文章

qt界面怎么去掉窗口关闭的按钮

求助QT窗口最大,最小,关闭按钮问题

2-Qt关闭子窗口时执行特定代码

Qt窗口关闭时如何释放内存?

Qt窗口关闭后重新打开

QT:如何关闭同一个小部件的多个窗口?