gpt4 book ai didi

python - PyQt app.exec() 似乎是非阻塞的

转载 作者:太空宇宙 更新时间:2023-11-04 04:57:41 25 4
gpt4 key购买 nike

我有一个非常复杂的 PyQt 应用程序(Qt5,在 Spyder 中运行),最后我做了

def main():
from PyQt5 import QtWidgets
if not QtWidgets.QApplication.instance():
app = QtWidgets.QApplication(sys.argv)
else:
app = QtWidgets.QApplication.instance()
main_window = MainWindow()
main_window.show()
status = app.exec_()
print status
sys.exit(0)

if __name__ == "__main__":
main()

(由于 this(第二个答案),需要进行 if-else 检查。)当我运行这段代码时,我的应用会显示,并打印状态代码 -1 同时(由于 spyder/utils/ipython/start_kernel.py 中出现错误)。我的问题是,为什么会打印出这个错误,因为我认为 app.exec_() 是一个阻塞调用,并且在应用程序以某种方式退出之前不会返回状态。这是因为 Spyder 运行它自己的 QApplication 吗?

最佳答案

不可能多次执行应用程序事件循环。这很容易用一个简单的脚本进行测试:

import sys
from PyQt5 import QtCore, QtWidgets

app = QtWidgets.QApplication(sys.argv)
btn = QtWidgets.QPushButton('Test')
btn.clicked.connect(lambda: print(QtWidgets.QApplication.exec_()))
btn.show()
sys.exit(app.exec_())

输出:

QCoreApplication::exec: The event loop is already running
-1

因此,如果事件循环已经在运行,exec 会立即返回而不会阻塞。

(注意:显然您需要在普通控制台中运行上述脚本才能正确测试它)。

关于python - PyQt app.exec() 似乎是非阻塞的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46692013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com