我使用 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
都在执行某些操作。这是因为在 Python 3 之前,
exec
是保留关键字,因此 PyQt 开发人员为其添加了下划线。从Python 3开始,exec
不再是保留关键字(因为它是内置函数;与print
情况相同),因此在PyQt5中提供不带下划线的版本以与C++保持一致是有意义的文档,但保留带下划线的版本以实现向后兼容性。因此,对于使用 Python 3 的 PyQt5,两个
exec
函数是相同的。对于较旧的 PyQt,只有
exec_()
可用。
已编辑
PyQt6 不再支持 exec_(),现在只有 exec() 可用
.... 所有 exec_() 和 print_() 方法已被删除。 ...
exec
exec
和
exec_
exec
和
exec_
exec_
QApplication
之外的许多其他类别 - 例如
QMenu
、
QDialog
、
QThread
等。因此,展望未来,不再需要使用
exec_
- 除非您想支持 PySide2,或下面提到的 Qt 和 Python 过时版本。(注意:标准 Qt5 LTS 支持于 2023 年 5 月结束,尽管
商业支持已延长至 2025 年 5 月。但是,Qt5 的使用寿命可能会持续到此之后,因为 KDE 仍在向后移植补丁根据原始 Qt 开源许可证)。
更新:
由于 PyQt4/Qt4 和 Python2 现已过时,以下部分答案不再相关:
关于是否更喜欢其中一个的问题:使用
exec_
意味着如果您决定添加,您就可以少担心一件事 支持 PyQt4 和/或 Python >= 2.6,并且想要维护单个 代码库。