如何使用 PyQt5 在 qml 中设置值? [英] How to set values in qml using PyQt5?
本文介绍了如何使用 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()
.
main.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_())
main.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屋!
查看全文