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