我有一個名為 Manager 的 python 類,它的注冊方式如下:
backend = Manager()
engine = QQmlApplicationEngine()
engine.rootContext().setContextProperty("backend", backend)
同樣在這個類(Manager)中,我有一個名為 paramDs 的屬性:
from PySide2.QtCore import QObject, Signal, Property, Slot
class Manager(QObject):
processResult = Signal(bool)
def __init__(self):
QObject.__init__(self)
self.ds = "loading .."
@Slot()
def start_processing(self):
self.set_ds("500")
def read_ds(self):
return self.ds
def set_ds(self, val):
self.ds = val
paramDs = Property(str, read_ds, set_ds)
同樣在我的 qml 中,我有一個表視圖:
import QtQuick 2.14
import Qt.labs.qmlmodels 1.0
TableView {
id:tb
anchors.fill: parent
columnSpacing: 1
rowSpacing: 1
clip: true
model: TableModel {
TableModelColumn { display: "param_name" }
TableModelColumn { display: "value" }
rows: [
{
"param_name": "Param",
"value": "Value"
},
{
"param_name": "number of classes",
"value": backend.paramDs
}
]
}
delegate: Rectangle {
implicitWidth: displayer.width 50 <100 ? 100 :displayer.width 50
implicitHeight: 50
color : "#aa009688"
Text {
id:displayer
text: display
color : "white"
anchors.centerIn: parent
}
}
}
現在在 qml 中的某些地方我稱之為start_processing()slot 。現在 paramDs 應該在表視圖中從“loading ..”更改為“500”,但它仍然是舊的“loading ..”值。
為什么屬性不會在 qml 中自行更新?
uj5u.com熱心網友回復:
如果您正在創建系結,則該屬性必須是可通知的,即具有關聯的信號并在其更改時發出它:
class Manager(QObject):
processResult = Signal(bool)
df_changed = Signal()
def __init__(self):
QObject.__init__(self)
self.ds = "loading .."
@Slot()
def start_processing(self):
self.set_ds("500")
def read_ds(self):
return self.ds
def set_ds(self, val):
self.ds = val
self.df_changed.emit()
paramDs = Property(str, read_ds, set_ds, notify=df_changed)
uj5u.com熱心網友回復:
您應該在設定屬性后設定 Row 值,如下所示:
tbModel.setRow(1,
{
param_name: "number of classes",
value: backend.paramDs
}
)
tbModel 是您的表視圖模型的 ID
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/359387.html
