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

  • 相关阅读:
    使用BackgroundWorker组件进行异步操作编程《转》
    C#多线程控制进度条之长任务操作《转》
    模态进度条窗体实现<转>
    dev xtraReports使用《转》
    客户端IP
    WebService获取服务端硬件信息和客户端IP,MAC,浏览器信息,所在城市《转》
    c#多线程 Invoke方法的使用<转>
    C# windowform进度条《转》
    XtraReports 打印控件的简单使用《转》
    hdu Marriage Match II
  • 原文地址:https://www.cnblogs.com/ibgo/p/11585348.html
Copyright © 2011-2022 走看看