54

我使用 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 中的语言关键字。但是官方 PyQt5 文档中的代码 (特别是退出时的对象破坏部分)。我看到那个例子显示了使用app.exec()which 让我感到困惑。

当我在我的机器上测试它时。我发现与我的结局没有任何明显的区别。有和没有_在没有时间差的情况下产生相同的输出。

我的问题是:

  • 我使用时有什么问题app.exec()吗?喜欢与 Python 的内部冲突exec?我怀疑是因为两者exec都在执行某些操作。
  • 如果不是,我可以互换使用两者吗?
4

3 回答 3

101

这是因为在 Python 3 之前,exec 它是一个保留关键字,所以 PyQt 开发人员为其添加了下划线。从 Python 3 开始,不再是保留关键字exec(因为它是内置函数;情况与 相同),因此在 PyQt5 中提供不带下划线的版本以与 C++ 文档保持一致是有意义的,但保留带下划线的版本为了向后兼容。所以对于 Python 3 的 PyQt5,这两个功能是一样的。对于较旧的 PyQt,仅可用。printexecexec_()

于 2014-03-24T16:08:20.887 回答
8

关于是否更喜欢一个的问题:使用exec_意味着如果您决定添加对 PyQt4 和/或 Python >= 2.6 的支持,并且想要维护一个单一的代码库,那么您不必担心一件事。

于 2014-03-24T20:07:14.357 回答
1

从 PyQt 6 开始,app.exec_()不再支持,仅支持app.exec()

因此,在构建新应用程序时,我只使用后者。

https://www.riverbankcomputing.com/static/Docs/PyQt6/pyqt5_differences.html?highlight=pyqt5

于 2021-12-18T18:17:56.343 回答