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