更改属性的PyQt5 QML更新/刷新视图?

时间:2018-02-06 13:43:22

标签: python qml pyqt5 qqmlapplicationengine

好的,所以我有这个简单的代码,它接受对象'button_name'的属性'Text'并修改它。它确实有效,但只有在视图(ApplicationWindow / engine)处于活动状态/聚焦状态且仅在我移动鼠标时才有效。如果视图失焦或鼠标未悬停在应用程序上,则屏幕上的文本不会更新。 (尝试使用其他属性,如'可见',它的行为方式相同。

import sys
from PyQt5.QtQml import QQmlApplicationEngine
from PyQt5.QtGui import QGuiApplication
from PyQt5.QtCore import QObject, QUrl


if __name__ == '__main__':
    sys.argv += ['--style', 'material']
    app = QGuiApplication(sys.argv)
    engine = QQmlApplicationEngine('basic.qml')
    button = engine.rootObjects()[0].findChild(QObject, "button_name")
    button.setProperty('text','New_Button_Text')
    sys.exit(app.exec_())  

并且basic.qml:

import QtQuick 2.0
import QtQuick.Controls 2.1
import QtQuick.Controls.Material 2.1

ApplicationWindow {
    visible: true
    width: 200
    height: 400
    Material.theme: Material.Light
    Material.accent: Material.Orange
    Column {
        anchors.centerIn: parent
        Button {
            objectName: "button_name"
            width: 200; height:50;
            font.capitalization: Font.MixedCase
            text: qsTr("Button Name")
            highlighted: true
            Material.background: Material.Orange

        }
    }
}

我确实找到了“dataChanged()”,但它似乎不适用于QQmlApplicationEngine,我正在研究clearComponentCache(),但这也没有做任何事情。

我还尝试将onTextChanged: console.log("Text has changed to:", text)添加到按钮中,并且没有任何内容被打印(即使在视图中更新了文本后)

此外,我无法访问Button的属性'Material.background'(它返回NoneType),但我可以访问它的所有其他属性。

0 个答案:

没有答案