Hallo Ich weiß, das ist eine alte und einfache Frage, aber ich verstehe es wirklich nicht. Wie kann ich die Werteigenschaft meines Kreismaßes dynamisch von Python in die qml-Datei ändern? Ich habe viel versucht, aber am Anfang wieder stehen. Weil ich neu bei QT und Python bin, kann mir jemand erklären, wie ich es machen soll? Ich kopierte die qml und die leere Python-Datei hier:Ändern Wert Eigenschaft der kreisförmigen Lehre
Python:
import sys
from PyQt5.QtCore import QObject, QUrl, Qt
from PyQt5.QtWidgets import QApplication
from PyQt5.QtQml import QQmlApplicationEngine
from PyQt5 import QtCore, QtGui
if __name__ == "__main__":
app = QApplication(sys.argv)
engine = QQmlApplicationEngine()
engine.load('dashboard.qml')
win = engine.rootObjects()[0]
win.textUpdated.connect(show)
win.show()
sys.exit(app.exec_())
Und das QML:
CircularGauge {
value: 66 **(Thats the value I want to change from Python)**
maximumValue: 1
width: parent.width
height: parent.height * 0.7
y: parent.height/2 + container.height * 0.01
style: IconGaugeStyle {
id: tempGaugeStyle
icon: "qrc:/images/temperature-icon.png"
maxWarningColor: Qt.rgba(0.5, 0, 0, 1)
tickmarkLabel: Text {
color: "white"
visible: styleData.value === 0 || styleData.value === 1
font.pixelSize: tempGaugeStyle.toPixels(0.225)
text: styleData.value === 0 ? "C" : (styleData.value === 1 ? "H" : "")
}
Vielen Dank für einen Noob helfen :)
Eigentlich haben Dieser Python:
class Celsius(QObject):
def __init__(self, temperature = 0.6):
self._temperature = temperature
@property
def temperature(self):
print("Getting value")
return self._temperature
@temperature.setter
def temperature(self, value):
if value < -273:
raise ValueError("Temperature below -273 is not possible")
print("Setting value")
self._temperature = value
rotatevalue = Celsius()
print(rotatevalue.temperature)
if __name__ == "__main__":
app = QApplication(sys.argv)
engine = QQmlApplicationEngine()
engine.load('dashboard.qml')
view = QQuickView()
root_context = view.rootContext().setContextProperty("valuepy", Celsius())
win = engine.rootObjects()[0]
win.textUpdated.connect(show)
win.show()
sys.exit(app.exec_())
QML ist das gleiche. Wenn ich rotatevalue.temperature drucke, habe ich den richtigen Wert in dieser Variablen, aber die Verbindung zu der qml ist immer noch ein Problem. Python sagt auf Lauf folgende:.
root_context = view.rootContext() setContextProperty ("valuepy", Celsius()) Runtime: super-Klasse init() vom Typ Celsius wurde nie genannt.
Und der Wert ist nicht in meinem Messgerät. Irgendwelche Ideen?
In C++ Sie eine 'QObject' abgeleiteten Klasse schaffen würde Das hat eine Eigenschaft mit einem Typ, der mit der Eigenschaft 'value' des QML-Elements kompatibel ist. Dann exportieren Sie eine Instanz dieser Klasse über 'engine.rootContext(). SetContextProperty()' Ich nehme an, das funktioniert auch mit Python, nur nicht sicher über die Syntax für Eigenschaften –
Danke für die Hilfe Herr Krammer, aber ich kann was tun Ich möchte, dass es nicht funktioniert, hat jemand ein einfaches Beispiel, einen Wert von Python in qml zu schreiben? –
Der wichtige Teil besteht darin, nicht "in QML zu schreiben", sondern eine Eigenschaft anzuzeigen und diese auf der QML-Seite zu binden. –