こんにちは私はこれは古くて簡単な質問だと知っていますが、実際には得られません。私のサーキュラーゲージのvalueプロパティをpythonからqmlファイルに動的に変更するにはどうすればよいですか?私はたくさん試しましたが、始めに再び立っていました。私はQTとPythonには非常に新しいので、誰かが私にどのように説明することができますか?私はここでQMLと空のPythonのファイルをコピー:サーキュラーゲージの値のプロパティを変更
の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_())
とQML:noobのを助けるため
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" : "")
}
どうもありがとう:)
が実際に持ちますこの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は同じです。 rotatevalue.temperatureを印刷すると、この変数に正しい値がありますが、qmlへの接続はまだ問題です。 Pythonは次の実行にこう述べています。
root_context = view.rootContext()setContextProperty( "valuepy"、摂氏()) はRuntimeError:スーパークラス摂氏が呼び出されることはありませんでした()タイプののinit。
この値はマイゲージにはありません。何か案は?
これは、QML要素の 'value'プロパティと互換性のある型を持つプロパティを持ちます。 次に、 'engine.rootContext()。setContextProperty()'を使ってそのクラスのインスタンスをエクスポートします。 これはPythonでも動作すると仮定していますが、プロパティの構文についてはわかりません。 –
助けてくれてありがとうKrammer私はそれを動作させたくないのですが、Pythonからqmlへの価値を書くという単純な例は誰にもありますか? –
インポータント部分は、「QMLへの書き込み」ではなく、それを公開してQML側でそれにバインドすることです。 –