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 等待窗口关闭的主要内容,如果未能解决你的问题,请参考以下文章