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 后没有任何问题地打印出来。