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

soc*_*ket 33 python qt pyqt python-3.x 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_())
Run Code Online (Sandbox Code Playgroud)

我知道exec是Python中的语言关键字.但官方PyQt5文档 上的代码(特别是退出部分的Object Destruction).我看到这个例子显示使用app.exec()它让我感到困惑.

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

我的问题是:

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

Oli*_*ver 54

那是因为在Python 3之前,它exec 是一个保留关键字,所以PyQt devs为它添加了下划线.在Python 3起,exec不再保留关键字(因为它是一个内置的功能;同样的情况print),所以它在PyQt5是有道理的,提供的版本没有下划线与C++的文档一致的,但要保持一个版本与下划线为了向后兼容.因此对于使用Python 3的PyQt5,这两个exec函数是相同的.对于较旧的PyQt,仅exec_()可用.

  • PyQt6 不再支持 ```exec_()```,现在仅 ```exec()``` 可用。 (6认同)

ekh*_*oro 6

关于是否优先于另一个的问题:使用exec_意味着如果您决定添加对PyQt4和/或Python> = 2.6的支持,并希望维护单个代码库,那么您可以少担心一件事.