def main():
app = QtWidgets.QApplication(sys.argv)
w = QtWidgets.QWidget()
w.show()
app.exec()
Run Code Online (Sandbox Code Playgroud)
这是一个非常简单的带有PyQt5框架的Python GUI程序.其实我不熟悉Qt,也是GUI编程的新手.与上面的程序一样,有一个QApplication已创建的对象以及QWidget.在这种情况下,app对象不包含w对象,我看不到其中两个之间的任何连接.那么为什么有必要QApplication使用该对象创建一个对象并执行它呢?谢谢!
您不需要创建QApplication,但它是一个为您做很多事情的便利类.
我不会解释它可能为您做的一切 - 您会在手册中找到- 但我可以解释您在示例代码中所做的两件事.
app = QtWidgets.QApplication(sys.argv)
Run Code Online (Sandbox Code Playgroud)
在这里,您将创建QApplication,并将参数传递给其构造函数.Qt 理解在执行应用程序时可以使用的某些参数.
app.exec_()
Run Code Online (Sandbox Code Playgroud)
就像你说的,似乎没有要间的相互作用app和w.但是有联系!
为了使Qt的GUI能够运行,它需要主线程中的事件循环.调用exec_()启动此事件循环.
引用QApplication :: exec()的文档:
进入主事件循环并等待直到调用exit(),然后返回设置为exit()的值(如果通过quit()调用exit(),则返回0).
必须调用此函数来启动事件处理.主事件循环从窗口系统接收事件并将这些事件分派给应用程序窗口小部件.
因此,只要您调用exec_(),控制就会离开您的main()函数并开始响应UI事件,直到您告诉它退出.
几乎所有桌面GUI都在某种程度上以这种方式工作,但并非所有桌面GUI都有一个很好的Application对象为您设置事件循环.如果您不熟悉事件驱动编程,那么您可能需要阅读这些概念.这篇维基百科的文章并不是一个糟糕的起点.
| 归档时间: |
|
| 查看次数: |
1642 次 |
| 最近记录: |