/examples/widgets/settings.py

https://github.com/akshayaurora/kivy · Python · 93 lines · 74 code · 19 blank · 0 comment · 8 complexity · bc13bc42e40a2228d419ee9d38b8078f MD5 · raw file

  1. from kivy.app import App
  2. from kivy.uix.button import Button
  3. from kivy.uix.boxlayout import BoxLayout
  4. from kivy.uix.label import Label
  5. from kivy.uix.popup import Popup
  6. from kivy.uix.settings import (SettingsWithSidebar,
  7. SettingsWithSpinner,
  8. SettingsWithTabbedPanel)
  9. from kivy.properties import OptionProperty, ObjectProperty
  10. class SettingsApp(App):
  11. display_type = OptionProperty('normal', options=['normal', 'popup'])
  12. settings_popup = ObjectProperty(None, allownone=True)
  13. def build(self):
  14. paneltype = Label(text='What kind of settings panel to use?')
  15. sidebar_button = Button(text='Sidebar')
  16. sidebar_button.bind(on_press=lambda j: self.set_settings_cls(
  17. SettingsWithSidebar))
  18. spinner_button = Button(text='Spinner')
  19. spinner_button.bind(on_press=lambda j: self.set_settings_cls(
  20. SettingsWithSpinner))
  21. tabbed_button = Button(text='TabbedPanel')
  22. tabbed_button.bind(on_press=lambda j: self.set_settings_cls(
  23. SettingsWithTabbedPanel))
  24. buttons = BoxLayout(orientation='horizontal')
  25. buttons.add_widget(sidebar_button)
  26. buttons.add_widget(spinner_button)
  27. buttons.add_widget(tabbed_button)
  28. displaytype = Label(text='How to display the settings?')
  29. display_buttons = BoxLayout(orientation='horizontal')
  30. onwin_button = Button(text='on window')
  31. onwin_button.bind(on_press=lambda j: self.set_display_type('normal'))
  32. popup_button = Button(text='in a popup')
  33. popup_button.bind(on_press=lambda j: self.set_display_type('popup'))
  34. display_buttons.add_widget(onwin_button)
  35. display_buttons.add_widget(popup_button)
  36. instruction = Label(text='Click to open the settings panel:')
  37. settings_button = Button(text='Open settings')
  38. settings_button.bind(on_press=self.open_settings)
  39. layout = BoxLayout(orientation='vertical')
  40. layout.add_widget(paneltype)
  41. layout.add_widget(buttons)
  42. layout.add_widget(displaytype)
  43. layout.add_widget(display_buttons)
  44. layout.add_widget(instruction)
  45. layout.add_widget(settings_button)
  46. return layout
  47. def on_settings_cls(self, *args):
  48. self.destroy_settings()
  49. def set_settings_cls(self, panel_type):
  50. self.settings_cls = panel_type
  51. def set_display_type(self, display_type):
  52. self.destroy_settings()
  53. self.display_type = display_type
  54. def display_settings(self, settings):
  55. if self.display_type == 'popup':
  56. p = self.settings_popup
  57. if p is None:
  58. self.settings_popup = p = Popup(content=settings,
  59. title='Settings',
  60. size_hint=(0.8, 0.8))
  61. if p.content is not settings:
  62. p.content = settings
  63. p.open()
  64. else:
  65. super(SettingsApp, self).display_settings(settings)
  66. def close_settings(self, *args):
  67. if self.display_type == 'popup':
  68. p = self.settings_popup
  69. if p is not None:
  70. p.dismiss()
  71. else:
  72. super(SettingsApp, self).close_settings()
  73. if __name__ == '__main__':
  74. SettingsApp().run()