Pyside2:使用属性更新QML表视图模型



我有一个名为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()插槽。现在paramD应该在表视图中从";正在加载"至";500〃;但它仍然很老";正在加载"价值

为什么属性不在qml中自我更新?

如果您正在创建绑定,则属性必须是可通知的,也就是说,具有关联的信号,并在其更改时发出:

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)

您应该在设置属性后设置Row值,如下所示:

tbModel.setRow(1,
{
param_name: "number of classes",
value: backend.paramDs
}
)

tbModel是您的表视图的模型的id

最新更新