如果我打开一个Python解释器并输入以下几行代码:
from PyQt4 import QtGui
app = QtGui.QApplication([])
w = QtGui.QLineEdit()
w.show()
然后出现一个文本输入部件。我可以在与解释器交互时与之交互。如果我已经附加了任何事件处理程序,它们也会被调用。
如果我执行 import time; time.sleep(10)
,该部件将在10秒钟内变得无响应。
如果我运行 app.exec_()
,那么该调用将阻塞,直到我关闭应用程序。
我的问题是:如果部件已经响应事件,运行 app.exec_()
的意义是什么?有什么不同吗?这只是一种防止应用程序关闭但仍服务于Qt事件循环的方法(while True: pass
会导致事件循环阻塞,因为我们从执行 time.sleep(10)
时理解到)
我还想了解Qt在哪里连接到CPython以允许解释器和GUI处于活动状态。我知道Python 2(可能还有3?)有所谓的 PyOS_InputHook
机制,大约每秒钟调用大约10次。IPython使用此机制运行GUI(需要大量努力以更快地处理GUI事件)。当我实例化 QApplication
时是否发生相同的事情?如果是,那么再次运行 app.exec_()
的意义是什么?
python script.py
,则脚本会很快完成并且GUI窗口会立即消失。 - Gus