0

好的,所以我有这个简单的代码,它获取对象“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 并且没有打印任何内容(即使在视图中更新了文本之后)

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

4

0 回答 0