2016-12-20 6 views
0

язык Kv есть способ импортировать имена из других файлов, используя следующий синтаксис:Как перенести переменную из .py-файла в файл .kv?

#:import name x.y.z 

# The same as `from x.y import z as name` in Python code 

Но это не говоря уже о том, как импортировать значения из того же модуля, где этот язык используется киловольт.
Скажем, у меня есть следующий код:

from kivy.app import App 
from kivy.lang import Builder 
from kivy.atlas import Atlas 
from kivy.uix.button import Button 

theme = Atlas('path/to/atlas') 

Builder.load_string(''' 
<MyWidget>: 
    background_normal: theme['widget_bg'] 
''') 

class MyWidget(Button): 
    pass 

class TestApp(App): 
    def build(self): 
     return MyWidget() 

TestApp().run() 

Я хотел бы импортировать theme объект Atlas в код киловольтного установить правильный фон. Как это можно сделать?

+0

попробуйте использовать 'root.theme' в файле .kv везде, где вам нужно использовать эту переменную. –

+0

@GeorgeBou 'root' относится к текущему корневому виджету, я не думаю, что он имеет какое-либо отношение к глобальному пространству имен – Leva7

+0

, вы также можете передать глобальную переменную в виджетах ... разве это не работает для вас? –

ответ

0

Вы можете обратиться к текущему модулю, как __main__

#:import theme __main__.theme 

<MyWidget>: 
    background_normal: theme['widget_bg']