У меня есть файл Main.qml, как это:
import QtQuick 2.0
Rectangle {
color: ggg.Colors.notificationMouseOverColor
width: 1024
height: 768
}
в файле Python, у меня есть это (я использую форму PyQt5):
App = QGuiApplication(sys.argv)
View = QQuickView()
View.setSource(QUrl('views/sc_side/Main.qml'))
Context = View.rootContext()
GlobalConfig = Config('sc').getGlobalConfig()
print (GlobalConfig, type(GlobalConfig))
Context.setContextProperty('ggg', GlobalConfig)
View.setResizeMode(QQuickView.SizeRootObjectToView)
View.showFullScreen()
sys.exit(App.exec_())
этот код Python распечатать это для конфигурации:
{'Colors': {'chatInputBackgroundColor': '#AFAFAF', 'sideButtonSelectedColor': '#4872E8', 'sideButtonTextColor': '#787878', 'sideButtonSelectedTextColor': '#E2EBFC', 'sideButtonMouseOverColor': '#DDDDDD', 'buttonBorderColor': '#818181', 'notificationMouseOverColor': '#383838', }} <class 'dict'>
когда я запускаю этот код, мой цвет прямоугольника меняется правильно, но у меня есть эта ошибка:
file:///.../views/sc_side/Main.qml:6: ReferenceError: ggg is not defined
но я не знаю, почему эта ошибка произошла, как я могу исправить эту ошибку?
Вам нужно установить свойство контекста до ты звонишь View.setSource
иначе в данный момент файл qml читается как свойство ggg
действительно не определено.
Попробуй это:
App = QGuiApplication(sys.argv)
View = QQuickView()
Context = View.rootContext()
GlobalConfig = Config('sc').getGlobalConfig()
print (GlobalConfig, type(GlobalConfig))
Context.setContextProperty('ggg', GlobalConfig)
View.setSource(QUrl('views/sc_side/Main.qml'))
View.setResizeMode(QQuickView.SizeRootObjectToView)
View.showFullScreen()
sys.exit(App.exec_())
Отказ от ответственности: не зная, что Config
Я не могу сказать, будет ли он действительно работать без каких-либо других модификаций.
Вы должны определить свойство context перед загрузкой файла QML,
это лучше, потому что он избегает предупреждений и перезагрузки контекста.
Если вы ДЕЙСТВИТЕЛЬНО вынуждены сделать это после, просто добавьте защиту в свой код QML:
color: (typeof (ggg) !== "undefined" ? ggg.Colors.notificationMouseOverColor : "transparent");
Затем, когда вы установите свойство context, он перезагрузит контекст (не рекомендуется), но, по крайней мере, ошибки не произойдет.