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