【发布时间】:2014-05-01 21:18:00
【问题描述】:
我使用 Python 3 和 PyQt5。这是我的测试 PyQt5 程序,关注最后两行:
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import sys
class window(QWidget):
def __init__(self,parent=None):
super().__init__(parent)
self.setWindowTitle('test')
self.resize(250,200)
app=QApplication(sys.argv)
w=window()
w.show()
sys.exit(app.exec())
#sys.exit(app.exec_())
我知道exec 是 Python 中的语言关键字。但是Official PyQt5 Documentation 上的代码(特别是Object Destruction on Exit 部分)。我看到该示例显示了 app.exec() 的使用,这让我感到困惑。
当我在我的机器上测试它时。我发现与我的结局没有任何明显的区别。无论有没有_,都会在没有时间差的情况下产生相同的输出。
我的问题是:
- 当我使用
app.exec()时有什么问题吗?喜欢与 Python 内部的exec发生冲突?我怀疑是因为exec都在执行某些操作。 - 如果不能,我可以同时使用两者吗?
【问题讨论】:
-
在 PyQt5 中,你根本不需要
sys.exit()。单独使用app.exec_()或app.exec()就足够了,并且可以正常工作。他们在 PyQt5 的底层修复了一些东西,这样你就不再需要sys.exit()了。如果您希望您的代码在 PyQt4 上运行,请在此处设置sys.exit()。另外,app.exec_()和app.exec()是可以互换的,所以你可以使用任何你喜欢的。如果您希望您的代码也可以在 PyQt4 上运行,那么请坚持使用app.exec_()。因此,底线是:要让您的代码在 PyQt5 和 PyQt4 上正常工作,请使用sys.exit(app.exec_())。 -
@Boštjan Mejak.. 非常感谢您的评论和解释!肯定需要更多的赞成票!到目前为止,我发现的第一条评论解释了我在代码中注意到的这些细微差别。从 pyqt4 到 pyqt5 的变化就像再次学习阅读(不得不承认.. 10 年不编程让一个人有点生疏.. 并且 python 在引擎盖下也弹出了一些有趣的球)。
-
@BoštjanMejak:你确实需要
sys.exit()否则app.exit(1)调用不会导致相应的退出状态,即,即使在Python 3 和PyQt5 上,使用sys.exit(app.exec())。 -
在 PyQt5 中,他们已经修复了 Qt 和 Python 停止进程的顺序,所以现在我们真的不需要再使用 sys.exit() 调用了。这一切都在 PyQt5 文档中进行了解释。
-
@BoštjanMejak:错误。这是minimal code example。顺便说一句,如果您希望我收到有关您的 cmets 的通知,请使用 \@ 语法。
标签: python qt python-3.x pyqt pyqt5