ReferenceError: "что-то" не определено в QML
у меня есть 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 печатает это для config:
{'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
но я не знаю, почему эта ошибка случилось, как я могу исправить эту ошибку?
2 ответов
необходимо задать свойство context до вы называете 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
есть, я не могу сказать, будет ли он действительно работать без каких-либо других изменений.
перед загрузкой файла QML необходимо определить свойство context, это лучше, потому что это позволяет избежать предупреждений и перезагрузки контекста.
Если вы действительно вынуждены сделать это после, просто добавьте безопасность в свой код QML:
color: (typeof (ggg) !== "undefined" ? ggg.Colors.notificationMouseOverColor : "transparent");
затем, когда вы установите свойство context, он перезагрузит контекст (не рекомендуется), но, по крайней мере, ошибка не произойдет.