Python操作qml对象过程详解
1.如何在python里获得qml里的对象?
1.1获取根对象
QML:
importQtQuick2.12
importQtQuick.Controls2.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]
这样就会获得id为window的ApplicationWindow对象。
1.2获取任意对象
需要在qml文件中加入objecName属性!
QML:
importQtQuick2.12
importQtQuick.Controls2.12
ApplicationWindow{
id:window
width:250
height:500
visible:true
Text{
id:txt
objectName:"txt"
text:"ClickMe"
font.pixelSize:20
anchors.centerIn:parent
}
}
Python:
engine=QQmlApplicationEngine()
engine.load('qml-test.qml')
txt_obj=engine.rootObjects()[0].findChild(QObject,"txt")
2.如何在python里读取和设置qml对象的属性和值?
2.1读取对象的属性(如Text对象)
首先通过findChild获取Text对象(注意txt是qml文件里的objectName):
txt_obj=engine.rootObjects()[0].findChild(QObject,"txt")
然后获取Text对象的text属性(使用property):
txt_value=txt_obj.property("text")
2.2设置对象的属性
使用setProperty方法可以更改对象的属性值。
txt_obj.setProperty("text","Clicked!")
完整代码:
importsys
fromPyQt5.QtCoreimportQObject
fromPyQt5.QtGuiimportQGuiApplication
fromPyQt5.QtQmlimportQQmlApplicationEngine
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())
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。