Python 为什么我需要创建'QApplication'对象,以及它在PyQt GUI编程中的用途是什么?

Python 为什么我需要创建'QApplication'对象,以及它在PyQt GUI编程中的用途是什么?,python,qt,pyqt5,Python,Qt,Pyqt5,这是一个非常简单的Python GUI程序,具有PyQt5框架。事实上,我不熟悉Qt,也是GUI编程的新手。在上面的程序中,创建了一个QApplication对象以及QWidget。在本例中,app对象不包含w对象,我看不到它们之间的任何连接。那么为什么需要创建QApplication的对象并使用该对象执行它呢? 谢谢大家! 您不需要创建QApplication,但它是一个方便的类,可以为您做很多事情 我不会解释它能为您做的一切--您可以在中找到--但我可以解释您在示例代码中正在做的两件事 de

这是一个非常简单的Python GUI程序,具有
PyQt5
框架。事实上,我不熟悉Qt,也是GUI编程的新手。在上面的程序中,创建了一个
QApplication
对象以及QWidget。在本例中,
app
对象不包含
w
对象,我看不到它们之间的任何连接。那么为什么需要创建
QApplication
的对象并使用该对象执行它呢? 谢谢大家!

您不需要创建QApplication,但它是一个方便的类,可以为您做很多事情

我不会解释它能为您做的一切--您可以在中找到--但我可以解释您在示例代码中正在做的两件事

def main():
    app = QtWidgets.QApplication(sys.argv)

    w = QtWidgets.QWidget()
    w.show()

    app.exec()
在这里,您将创建QApplication,并将参数传递给其构造函数。执行应用程序时可以使用的Qt

app = QtWidgets.QApplication(sys.argv)
就像你说的,在
app
w
之间似乎没有任何交互作用。但是有一种联系

为了让Qt的GUI正常工作,它需要在主线程中有一个事件循环。调用
exec\uz()
将启动此事件循环

要引用以下文档:

进入主事件循环并等待调用exit(),然后 返回设置为exit()的值(如果exit()为 通过quit()调用

必须调用此函数才能开始事件处理。这个 主事件循环接收来自窗口系统的事件并进行调度 将这些应用程序添加到应用程序小部件

因此,只要您调用
exec()
,控件就会离开
main()
函数并开始响应UI事件,直到您告诉它退出为止


在某种程度上,几乎所有桌面GUI都是这样工作的,尽管并非所有GUI都有一个很好的应用程序对象来为您设置事件循环。如果您是事件驱动编程的新手,您可能希望了解这些概念。这是一个不错的起点。

请阅读Qt的介绍。这里应该解释为什么您需要QApplication,或者如果您的应用程序不需要UI,您有哪些选项。实际上,无论是否使用事件队列,在尝试创建任何
QWidget
对象之前都需要有
QApplication
对象
QApplication
不仅仅是一个方便的类,它基本上设置了任何GUI系统运行所必需的大多数核心幕后GUI对象。这是对
QtCoreApplication
设置和控制的所有核心Qt功能的补充。
app.exec_()