我应该在PyQt应用程序中使用`app.exec()`或`app.exec _()`吗?

时间:2014-03-24 13:24:11

标签: python qt python-3.x pyqt pyqt5

我使用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 (特别是退出时的对象销毁部分)。我看到这个例子显示使用app.exec()会让我感到困惑。

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

我的问题是:

  • 使用app.exec()时有什么不对吗?喜欢与Python的内部exec发生冲突?我怀疑是因为exec正在执行某些事情。
  • 如果没有,我可以互换使用吗?

2 个答案:

答案 0 :(得分:44)

那是因为在Python 3 exec was a reserved keyword之前,所以PyQt开发者为它添加了下划线。从Python 3开始,execno longer a reserved keyword(因为它是内置函数;与print相同的情况),因此在PyQt5中提供没有下划线的版本是一致的使用C ++文档,但保留带下划线的版本以实现向后兼容性。因此对于使用Python 3的PyQt5,两个exec函数是相同的。对于较旧的PyQt,只有exec_()可用。

答案 1 :(得分:6)

关于是否优先选择其中一个问题:使用exec_意味着如果您决定添加对PyQt4和/或Python> = 2.6的支持,那么您可以少担心一件事保持单一的代码库。

相关问题