Python 从模型更新UI组件

Python 从模型更新UI组件,python,qml,pyside2,Python,Qml,Pyside2,与其他框架相比,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(s

与其他框架相比,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
在我的
视图中.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
}
现在,当我打开视图时,我看到控制台输出,文本标签不显示-correct。但在我的模型上运行
update_state_to_running
时,它不会出现。在其他框架中,这会显示标签,但似乎我必须触发一个事件来更新UI?
我真的很纳闷,为什么对于这么简单的任务来说这太复杂了。

默认属性是不可通知的,如果您希望通知更改,那么必须将其与信号关联:

class Foo(QObject):
    stateChanged = Signal()
    # ...
    def update_state_to_running(self):
        """
        """
        self._logger.info('MODEL - RUNNING')
        self.VIEW_STATE = State.RUNNING
        self.stateChanged.emit()

    @Property(bool, notify=stateChanged)
    def view_running(self):
        """
        """
        return self.VIEW_STATE == State.RUNNING
Foo类(QObject):
stateChanged=信号()
# ...
def更新_状态_至_运行(自身):
"""
"""
self.\u logger.info('MODEL-RUNNING')
self.VIEW\u STATE=STATE.RUNNING
self.stateChanged.emit()
@属性(bool,notify=stateChanged)
def视图_运行(自):
"""
"""

return self.VIEW_STATE==STATE.RUNNING
谢谢。谁将收听
状态更改
?有没有一个简单的例子?我从其他框架中得知,这将自动完成。我必须在
qml
中做些什么才能听到这些?aaaah,现在我看到了连接
stateChanged.emit()
将被
notify=stateChanged
捕获,因此它会随之更新
stateChanged
是一个
model.py
内部信号。@ElDude连接在
可见:model.view\u运行时,您在那里进行了绑定,但它仅通过信号更新。不要期望在不同的框架中有相同的行为,每个框架都有自己独特的工作方式是的,我对这些基本功能所需的参与程度感到困惑。