Python 从模型更新UI组件
与其他框架相比,PySide2/QML执行最简单的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
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运行时,您在那里进行了绑定,但它仅通过信号更新。不要期望在不同的框架中有相同的行为,每个框架都有自己独特的工作方式是的,我对这些基本功能所需的参与程度感到困惑。