2014-03-24 53 views
19

我使用Python 3和PyQt5。下面是我的測試程序PyQt5,專注於最後兩行:我應該在我的PyQt應用程序中使用`app.exec()`或`app.exec _()`嗎?

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都在執行某些操作。
  • 如果不是,我可以互換使用嗎?
+1

在PyQt5中,根本不需要'sys.exit()'。 'app.exec _()'或'app.exec()'就足夠了,它可以正常工作。他們在PyQt5中修正了一些問題,這樣你就不需要'sys.exit()'了。如果你想讓你的代碼在PyQt4上運行,那麼在那裏有'sys.exit()'。另外,'app.exec _()'和'app.exec()'是可以互換的,所以你可以使用任何你喜歡的。如果你想讓你的代碼在PyQt4上運行,那麼使用'app.exec _()'。因此,底線是:爲了讓您的代碼在PyQt5 **和** PyQt4上正常工作,請使用'sys.exit(app.exec _())'。 –

+0

@BoštjanMejak .. hoora爲您的評論和完美!肯定需要更多upvotes!到目前爲止的第一條評論我發現解釋了我在代碼中注意到的這些細微差異。從pyqt4到pyqt5的變化就像學習再讀一樣(不得不承認.. 10年沒有編程讓人有點生疏......而蟒蛇也在引擎蓋下彈出一些趣味球)。 – ZF007

+0

@BoštjanMejak:您確實需要'sys.exit()'否則'app.exit(1)'調用不會導致相應的退出狀態,即使在Python 3和PyQt5上也可以使用'sys.exit(app。 EXEC())'。 – jfs

回答

33

這是因爲,直到Python 3 execwas a reserved keyword,所以PyQt devs增加了下劃線。從Python 3開始,execno longer a reserved keyword(因爲它是一個內置函數;與print相同),所以PyQt5提供一個沒有下劃線的版本與C++文檔保持一致是有意義的,但保留一個帶有下劃線的版本兼容性。因此對於使用Python 3的PyQt5,兩個exec函數是相同的。對於較舊的PyQt,只有exec_()可用。

5

關於是否更喜歡一個:使用exec_意味着如果您決定添加對PyQt4和/或Python> = 2.6的支持並且想要維護一個代碼庫。

相關問題