与其他框架相比,PySide2/QML 执行最简单的 UI 相关任务的固有复杂性让我感到困惑。但现在我被困住了,不得不掉进那个兔子洞。
我有一个model.py
,其中包含:
def update_state_to_running(self):
"""
"""
self._logger.info('MODEL - RUNNING')
self.VIEW_STATE = State.RUNNING
@Property(bool)
def view_running(self):
"""
"""
return self.VIEW_STATE == State.RUNNING
在我的view.qml
DynamicText {
anchors.horizontalCenter: parent.horizontalCenter
text: qsTr("In Progress")
visible:{ console.log('RUNNING');
console.log(model.view_running);
return model.view_running;}
font.pixelSize: 18
}
现在,当我打开 View 时,我看到控制台输出,文本标签未显示 - 正确。但当我在模型上运行 update_state_to_running
时,它不会出现。在其他框架中,这会显示标签,但似乎我必须触发一个事件来更新 UI?
我真的很困惑为什么对于如此简单的任务来说如此复杂。
最佳答案
默认属性是不可通知的,如果您希望通知更改,则必须将其与信号关联:
class Foo(QObject):
<b>stateChanged = Signal()</b>
# ...
def update_state_to_running(self):
"""
"""
self._logger.info('MODEL - RUNNING')
self.VIEW_STATE = State.RUNNING
<b>self.stateChanged.emit()</b>
@Property(bool, <b>notify=stateChanged</b>)
def view_running(self):
"""
"""
return self.VIEW_STATE == State.RUNNING
关于python - 从模型更新 UI 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62328872/