zoukankan      html  css  js  c++  java
  • Python操作qml对象

    1. 如何在python里获得qml里的对象?

    1.1 获取根对象

    QML:

    import QtQuick 2.12
    import QtQuick.Controls 2.12
    
    ApplicationWindow {
        id: window
         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:

    import QtQuick 2.12
    import QtQuick.Controls 2.12
    
    ApplicationWindow {
        id: window
         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")

    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!")

    完整代码:

    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())

    -- END --

  • 相关阅读:
    算法(Java实现)—— KMP算法
    算法(Java实现)—— 动态规划算法
    算法(Java实现)—— 分治算法
    算法(Java实现)—— 二分搜索算法
    JDBC(八)—— 数据库连接池
    JDBC(七)—— Dao层操作
    JDBC(六)—— 数据库事务
    JDBC(五)—— 批量插入数据
    JDBC(四)—— Blob类型操作
    Myeclipse10.X安装findbugs插件记录
  • 原文地址:https://www.cnblogs.com/ibgo/p/11585348.html
Copyright © 2011-2022 走看看