Python 调用 QML 的两种方式
在 PySide6 和 QML 中,有两种主要的方式来创建和管理 QML UI:使用
QQuickView和QQmlApplicationEngine。
1. QQuickView
QQuickView 是一个可视化窗口,用于显示和管理 QML UI。您可以将 QQuickView 视为一个独立的窗口,它可以加载和显示 QML 文件。
- 使用
QQuickView或QQmlApplicationEngine类可以创建一个 QML 视图对象,它是一个高级界面容器,可以显示 QML 内容。 - QML 视图可以加载和显示 QML 文件,而不需要额外的代码。
- 可以使用
rootObject()方法获取根 QML 对象,然后通过该对象访问 QML 中的属性和方法。 - QML 视图对象通常用于简单的界面应用程序,而不需要太多的自定义逻辑。
QML 视图对象通常用于简单的界面应用程序,而不需要太多的自定义逻辑。
1from PySide6.QtCore import QUrl
2from PySide6.QtGui import QGuiApplication
3from PySide6.QtQuick import QQuickView
4
5app = QGuiApplication([])
6view = QQuickView()
7view.setSource(QUrl.fromLocalFile("main.qml"))
8view.show()
9app.exec()
在上述示例中,我们创建了一个 QQuickView 对象,并使用 setSource 方法加载了一个 QML 文件。然后,使用 show 方法显示了窗口,最后通过 app.exec 进入 Qt 事件循环。
2. QQmlApplicationEngine
QQmlApplicationEngine 是一个 QML 引擎,它可以加载和执行 QML 文件,并将其嵌入到现有的 Qt 应用程序中。
- 使用
QmlEngine类可以创建一个 QML 引擎对象,它负责加载和管理 QML 内容。 - 可以将 QML 文件加载到引擎中,并通过引擎对象与 Python 代码进行交互。
- 引擎对象可以设置全局属性、注册自定义类型和提供信号与槽机制。
- 可以通过
rootObjects()方法获取根 QML 对象,然后通过该对象访问 QML 中的属性和方法。
1from PySide6.QtCore import QUrl
2from PySide6.QtGui import QGuiApplication
3from PySide6.QtQml import QQmlApplicationEngine
4
5app = QGuiApplication([])
6engine = QQmlApplicationEngine()
7engine.load(QUrl.fromLocalFile("main.qml"))
8app.exec()
在上述示例中,我们创建了一个 QQmlApplicationEngine 对象,并使用 load 方法加载了一个 QML 文件。然后,通过 app.exec 进入 Qt 事件循环。
3. 主要区别
- QQuickView 是一个可视化窗口,可以作为独立的应用程序窗口来使用,可以使用窗口管理功能,例如调整大小、最小化等。
- QQmlApplicationEngine 是一个 QML 引擎,主要用于将 QML 嵌入到现有的 Qt 应用程序中,没有独立的窗口管理功能。
4. 总结
- 使用 QML 引擎(QML Engine)可以手动加载 QML 文件并进行更多的自定义操作,适用于需要更复杂交互和逻辑的场景。
- 使用 QML 视图(QML View)是一种简化的方式,适用于简单的界面应用程序,无需太多自定义操作。
- 如果您只需要一个独立的 QML 窗口,可以使用 QQuickView。如果您希望将 QML 嵌入到现有的 Qt 应用程序中,可以选择 QQmlApplicationEngine。