I'm using kivy to create a small App for computer aided learning.
At the moment I have some problems with accessing config values. I get the value with
self.language = self.config.get('basicsettings', 'language')
in the main App-Class. That works fine, however, I don't know how to access these value inside another widget - in this case the AudioButton.
I'm using a ScreenManager, which contains a Screen. Inside is a BoxLayout, which contains a GridLayout and this holds several AudioButtons.
Now, in this AudioButton I want to know the current value of self.language
defined in the mainApp.
In .kv files I can do something like
`text: app.language`
to get it, but how to do it directly in Python?
If I use a dummy label in kv to get the value, it works, but when I change the setting, I need to restart the App, because I don't know what I need to add to on_config_change()
to update the value during runtime.
Here's a very simplified version of my App with all interesting parts, I hope.
class AudioButton(Button):filename = StringProperty(None)sound = ObjectProperty(None, allownone=True)def on_press(self):if self.ids.playsound.text == '1':self.sound.play()else:print('NoSound')class MainScreen(Screen):passclass Pictures1(GridLayout):def __init__(self, **kwargs):super(Pictures1, self).__init__(**kwargs)self.cols = 2btn = AudioButton()self.add_widget(btn)btn = AudioButton()self.add_widget(btn)class Lesson1(Screen):passclass ScreenManagement(ScreenManager):passclass LunahutsoApp(App):def build(self):self.settings_cls = SettingsWithSidebarself.use_kivy_settings = Falseself.language = self.config.get('basicsettings', 'language')self.playsound = self.config.get('basicsettings', 'playsound')return ScreenManagement()def build_config(self, config):config.setdefaults('basicsettings', {'language': 'austrian','playsound': 1})def build_settings(self, settings):settings.add_json_panel('Lunahutso',self.config,data=settings_json)def on_config_change(self, config, section,key, value):if key == 'language':self.language = valueif key == 'playsound':self.playsound = valueif __name__ == "__main__":LunahutsoApp().run()
And the .kv file:
<ScreenManagement>:MainScreen:Lesson1:<AudioButton>:Label:id: languagetext: app.languagecolor: 0, 0, 0, 0Label:id: playsoundtext: app.playsoundcolor: 0, 0, 0, 0<MainScreen>:name: "main"BoxLayout:orientation: 'vertical'Button:on_release: app.root.current = "lesson1"text: "Lesson"font_size: 50Button:on_release: app.open_settings()text: "Settings"font_size: 50Button:on_release: sys.exit()text: "Quit"font_size: 50<Lesson1>:name: "lesson1"id: lesson1BoxLayout:orientation: 'vertical'Pictures1:size_hint_y: 0.5BoxLayout:size_hint_y: 0.15Label:text: ""