Qt等待window关闭
Qt wait for window to close
我正在写 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
好的,所以您遇到的问题是 open_qt(self)
方法末尾的 sys.exit(app.exec_())
:
- 这行代码
sys.exit(app.exec_())
表示app关闭(执行)后,你也会立即调用sys.exit()
函数
sys.exit()
然后立即终止脚本,这样您的代码就不会到达 print("after")
语句。
- 将这部分重写为:
app.exec_()
- 然后你会看到
after
语句在关闭 GUI 后没有任何问题地打印出来。
我正在写 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
好的,所以您遇到的问题是 open_qt(self)
方法末尾的 sys.exit(app.exec_())
:
- 这行代码
sys.exit(app.exec_())
表示app关闭(执行)后,你也会立即调用sys.exit()
函数 sys.exit()
然后立即终止脚本,这样您的代码就不会到达print("after")
语句。- 将这部分重写为:
app.exec_()
- 然后你会看到
after
语句在关闭 GUI 后没有任何问题地打印出来。