ReferenceError: “algo” no está definido en QML

Tengo el archivo Main.qml como este:

import QtQuick 2.0 Rectangle { color: ggg.Colors.notificationMouseOverColor width: 1024 height: 768 } 

en el archivo python, tengo esto (uso el formulario 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_()) 

Este código de Python imprime esto para la configuración:

 {'Colors': {'chatInputBackgroundColor': '#AFAFAF', 'sideButtonSelectedColor': '#4872E8', 'sideButtonTextColor': '#787878', 'sideButtonSelectedTextColor': '#E2EBFC', 'sideButtonMouseOverColor': '#DDDDDD', 'buttonBorderColor': '#818181', 'notificationMouseOverColor': '#383838', }}  

cuando ejecuto este código, mi rectángulo de color cambia correctamente, pero tengo este error:

 file:///.../views/sc_side/Main.qml:6: ReferenceError: ggg is not defined 

pero no sé por qué ha ocurrido este error, ¿cómo puedo solucionar este error?

View.setSource establecer la propiedad de contexto antes de llamar a View.setSource , de lo contrario, en el momento en que se lea el archivo qml, la propiedad ggg estará definida.

Prueba esto:

 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_()) 

Descargo de responsabilidad: sin saber qué es Config , no puedo decir si realmente funcionará sin ninguna otra modificación.

Debe definir la propiedad de contexto antes de cargar el archivo QML, es mejor porque evita las advertencias y la recarga del contexto.

Si REALMENTE está obligado a hacerlo después, simplemente agregue una seguridad en su código QML:

 color: (typeof (ggg) !== "undefined" ? ggg.Colors.notificationMouseOverColor : "transparent"); 

Luego, cuando establezca la propiedad de contexto, volverá a cargar el contexto (no recomendado) pero al menos no se producirá ningún error.