如果我打開一個Python解釋器,然後輸入以下行PyQt事件循環在哪裏運行?
from PyQt4 import QtGui
app = QtGui.QApplication([])
w = QtGui.QLineEdit()
w.show()
然後文本輸入控件出現。我可以在與口譯員互動時與其交互。如果我附加了任何事件處理程序,它們也會被調用。
如果我做的是import time; time.sleep(10)
,則控件在10秒內無響應。
如果我運行app.exec_()
,該調用會阻塞,直到關閉應用程序。
我的問題是,如果Widget已經對事件做出響應,那麼運行app.exec_()
有什麼意義?有什麼不同嗎?這是否只是一種防止關閉,同時還服務於Qt的事件循環(while True: pass
將導致事件循環阻塞,因爲我們從做time.sleep(10)
理解)應用程序的方式
我也想明白的地方的Qt已經勾搭成CPython的這允許解釋器和GUI活動。我知道Python 2(也可能是3?)有一個所謂的PyOS_InputHook
機制,大概每秒調用10次。 IPython使用它來運行一個GUI(有很多努力來處理GUI事件的速度超過每秒10次)。當我實例化一個QApplication
時是否發生同樣的事情?如果是這樣,請再次調用app.exec_()
您使用的是什麼Python解釋器? IPython還是實際上直蟒蛇?如果您要將相同的代碼放在.py文件中並運行它,推測它不會得到相同的行爲? – 2015-01-21 07:07:23
這與Python和IPython一起發生。如果我將代碼放入.py文件並將該文件導入到會話中,我會得到上述行爲。如果我'python script.py',腳本結束並且gui窗口幾乎立即消失。 – Gus 2015-01-21 08:58:24