python - 从模型更新 UI 组件

标签 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(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/

相关文章:

qt - 如何在另一个应用程序中使用 QT QML C++ 插件?

python - 从多列(其中一列)的开头自动完成

python - PySide2 + QML : QApplication: invalid style override passed, 忽略它

python - 对齐文本文件中的列

python - Pycharm:跨平台共享运行配置

python - 是否可以列出所有被阻止的 Tornado 协程

python - 使用 PyInstaller 打包后 PySide2 应用程序中的路径错误

python - 类型错误 : 'int' object is not subscriptable {Python}

c++ - 是否可以从 C++ 在 QML 上编写上下文属性?

qt - 如何在 Gridview 中创建间距