• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1"""Ttk Theme Selector.
2
3Although it is a theme selector, you won't notice many changes since
4there is only a combobox and a frame around.
5"""
6import ttk
7
8class App(ttk.Frame):
9    def __init__(self):
10        ttk.Frame.__init__(self)
11
12        self.style = ttk.Style()
13        self._setup_widgets()
14
15    def _change_theme(self, event):
16        if event.widget.current(): # value #0 is not a theme
17            newtheme = event.widget.get()
18            # change to the new theme and refresh all the widgets
19            self.style.theme_use(newtheme)
20
21    def _setup_widgets(self):
22        themes = list(self.style.theme_names())
23        themes.insert(0, "Pick a theme")
24        # Create a readonly Combobox which will display 4 values at max,
25        # which will cause it to create a scrollbar if there are more
26        # than 4 values in total.
27        themes_combo = ttk.Combobox(self, values=themes, state="readonly",
28                                    height=4)
29        themes_combo.set(themes[0]) # sets the combobox value to "Pick a theme"
30        # Combobox widget generates a <<ComboboxSelected>> virtual event
31        # when the user selects an element. This event is generated after
32        # the listbox is unposted (after you select an item, the combobox's
33        # listbox disappears, then it is said that listbox is now unposted).
34        themes_combo.bind("<<ComboboxSelected>>", self._change_theme)
35        themes_combo.pack(fill='x')
36
37        self.pack(fill='both', expand=1)
38
39
40def main():
41    app = App()
42    app.master.title("Ttk Combobox")
43    app.mainloop()
44
45if __name__ == "__main__":
46    main()
47