web-dev-qa-db-ja.com

PyQtアプリケーションで `app.exec()`または `app.exec _()`を使用する必要がありますか?

私はPython 3とPyQt5を使用しています。これが私のテストPyQt5プログラムです。最後の2行に注目してください:

_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()の使用を示しています。

私のマシンでテストしたとき。私の終わりから目に見える違いはないことがわかりました。 ___ありとなしの両方で、時間差なく同じ出力が生成されます。

私の質問は:

  • app.exec()を使用するときに問題はありますか? Pythonの内部execと衝突するような両方のexecが何かを実行しているためだと思います。
  • そうでない場合、両方を交換して使用できますか?
35
socket

これは、Python 3、exec予約済みのキーワードでした まで、PyQt開発者がアンダースコアを追加したためです。 Python 3以降、exec予約済みキーワードではなくなりました (組み込み関数であるため、printと同じ状況)なので、PyQt5ではバージョンなしのバージョンを提供することが理にかなっていますアンダースコアはC++ドキュメントとの一貫性を保つためですが、下位互換性のためにアンダースコアを含むバージョンを保持してください。したがって、Python 3を使用するPyQt5の場合、2つのexec関数は同じです。古いPyQtの場合、exec_()のみを使用できます。

61
Oliver

どちらを優先するかという問題について:exec_を使用することで、PyQt4のサポートやPython> = 2.6、単一のコードベースを維持したい。

7
ekhumoro