私は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
が何かを実行しているためだと思います。これは、Python 3、exec
予約済みのキーワードでした まで、PyQt開発者がアンダースコアを追加したためです。 Python 3以降、exec
は 予約済みキーワードではなくなりました (組み込み関数であるため、print
と同じ状況)なので、PyQt5ではバージョンなしのバージョンを提供することが理にかなっていますアンダースコアはC++ドキュメントとの一貫性を保つためですが、下位互換性のためにアンダースコアを含むバージョンを保持してください。したがって、Python 3を使用するPyQt5の場合、2つのexec
関数は同じです。古いPyQtの場合、exec_()
のみを使用できます。
どちらを優先するかという問題について:exec_
を使用することで、PyQt4のサポートやPython> = 2.6、単一のコードベースを維持したい。