Python与QML交互:获取对象及读写属性完整指南
本文详细讲解如何在Python中通过QQmlApplicationEngine获取QML根对象及任意子对象,并演示如何使用findChild、property和setProperty方法读取和修改QML对象的属性值,提供完整代码示例。
Python与QML交互:获取对象及读写属性完整指南
如何在Python中获取QML中的对象?
获取QML根对象
1.1 获取根对象
QML代码示例:
import QtQuick 2.12
import QtQuick.Controls 2.12
ApplicationWindow {
id: window
width: 250
height: 500
visible: true
// ...
}
Python代码示例:
通过调用QQmlApplicationEngine类的rootObjects方法,可以获取一个包含根对象的列表,取索引为0的元素即为根对象。
engine = QQmlApplicationEngine()
engine.load('qml-test.qml')
root_obj = engine.rootObjects()[0]
执行上述代码后,即可获得QML文件中id为window的ApplicationWindow对象。
获取任意QML子对象
1.2 获取任意子对象
为了在Python中定位特定QML元素,必须在对应的QML文件中显式定义objectName属性。
QML代码示例:
import QtQuick 2.12
import QtQuick.Controls 2.12
ApplicationWindow {
id: window
width: 250
height: 500
visible: true
Text {
id: txt
objectName: "txt"
text: "Click Me"
font.pixelSize: 20
anchors.centerIn: parent
}
}
Python代码示例:
engine = QQmlApplicationEngine()
engine.load('qml-test.qml')
txt_obj = engine.rootObjects()[0].findChild(QObject, "txt")
读写QML对象属性
2. 如何在Python中读取和设置QML对象的属性与值?
2.1 读取对象属性(以Text对象为例)
首先,利用findChild方法获取指定的Text对象(注意:此处"txt"对应QML文件中的objectName属性值):
txt_obj = engine.rootObjects()[0].findChild(QObject, "txt")
随后,通过property方法获取该Text对象的text属性值:
txt_value = txt_obj.property("text")
2.2 设置对象属性
使用setProperty方法可以直接更改对象的属性值。
txt_obj.setProperty("text", "Clicked!")
完整代码示例:
import sys
from PyQt5.QtCore import QObject
from PyQt5.QtGui import QGuiApplication
from PyQt5.QtQml import QQmlApplicationEngine
app = QGuiApplication(sys.argv)
engine = QQmlApplicationEngine()
engine.load('qml-test.qml')
# 根对象
root_obj = engine.rootObjects()[0]
# Text对象
txt_obj = engine.rootObjects()[0].findChild(QObject, "txt")
# 读取属性值
txt_value = txt_obj.property("text")
# 设置属性值
txt_obj.setProperty("text", "Clicked!")
sys.exit(app.exec())
以上即为本文的全部内容,希望能为您的学习提供有益帮助,也欢迎大家继续支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









