gpt4 book ai didi

python - 为什么我需要创建 `QApplication` 的对象,它在 PyQt GUI 编程中的目的是什么?

转载 作者:太空狗 更新时间:2023-10-29 21:39:22 25 4
gpt4 key购买 nike

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

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

app.exec()

这是一个非常简单的 Python GUI 程序,采用 PyQt5 框架。其实我对Qt并不熟悉,也是GUI编程的新手。在上面的程序中,QApplication 的对象和 QWidget 都已创建。在这种情况下,app 对象不包含 w 对象,我看不到它们两者之间的任何联系。那么为什么有必要创建一个QApplication 对象并使用该对象执行它呢?谢谢!

最佳答案

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

我不会解释它可能为您做的所有事情——您会在 the manual 中找到它-- 但我可以在您的示例代码中解释您正在做的两件事。

app = QtWidgets.QApplication(sys.argv)

这里您正在创建 QApplication,并将参数传递给它的构造函数。 Qt understands certain arguments可以在执行应用程序时使用。

app.exec_()

正如您所说,appw 之间似乎没有任何交互。但是有联系!

为了让 Qt 的 GUI 发挥作用,它需要在主线程中有一个事件循环。调用 exec_() 启动此事件循环。

引用 QApplication::exec() 的文档:

Enters the main event loop and waits until exit() is called, then returns the value that was set to exit() (which is 0 if exit() is called via quit()).

It is necessary to call this function to start event handling. The main event loop receives events from the window system and dispatches these to the application widgets.

因此,一旦您调用 exec_(),控制就会离开您的 main() 函数并开始响应 UI 事件,直到您告诉它退出。

几乎所有桌面 GUI 在某种程度上都以这种方式工作,尽管并非所有桌面 GUI 都有一个很好的应用程序对象来为您设置事件循环。如果您是事件驱动编程的新手,您可能需要阅读这些概念。 This Wikipedia article是一个不错的起点。

关于python - 为什么我需要创建 `QApplication` 的对象,它在 PyQt GUI 编程中的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34125618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com