如何使用 PyQt5 在 qml 中设置值? [英] How to set values in qml using PyQt5?

查看:64
本文介绍了如何使用 PyQt5 在 qml 中设置值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

从 PyQt5,我想将值写入 qml.该值动态变化.例如它在矩形文本值是从 Pyqt5 提交的

From PyQt5 i want to write values into qml. This values change dynamically. For example it in rectangle text value is filed from Pyqt5

    Rectangle {
        width: 75
        height: 75
        text { values from PyQt5 }
    }    

推荐答案

如果你想从 python 修改 QML 属性,你必须创建一个继承自 QObject 的类,它是一个 qproperty,然后使用 setContextProperty() 将其导出到 QML.

If you want to modify a QML property from python you must create a Class that inherits from QObject and that is a qproperty, then export it to QML using setContextProperty().

ma​​in.py

import sys

from PyQt5.QtCore import QObject, pyqtSignal, pyqtProperty, QUrl, QTimer, QDateTime
from PyQt5.QtGui import QGuiApplication
from PyQt5.QtQml import QQmlApplicationEngine

class Foo(QObject):
    textChanged = pyqtSignal()

    def __init__(self, parent=None):
        QObject.__init__(self, parent)
        self._text = ""

    @pyqtProperty(str, notify=textChanged)
    def text(self):
        return self._text

    @text.setter
    def text(self, value):
        if self._text == value:
            return
        self._text = value
        self.textChanged.emit()


def update_value():
    obj.text = "values from PyQt5 :-D : {}".format(QDateTime.currentDateTime().toString())

if __name__ == "__main__":
    app = QGuiApplication(sys.argv)
    obj = Foo()
    timer = QTimer()
    timer.timeout.connect(update_value)
    timer.start(100)
    engine = QQmlApplicationEngine()
    engine.rootContext().setContextProperty("obj", obj)
    engine.load(QUrl("main.qml"))
    if not engine.rootObjects():
        sys.exit(-1)
    sys.exit(app.exec_())

ma​​in.qml

import QtQuick 2.5
import QtQuick.Window 2.2

Window {
    visible: true
    width: 640
    height: 480
    Text{
        anchors.fill: parent
        text:  obj.text
    }

}

这篇关于如何使用 PyQt5 在 qml 中设置值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆