好的,所以我有这个简单的代码,它获取对象“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),但我可以访问它的所有其他属性。