Import Upstream version 2.7.18
This commit is contained in:
61
Demo/tkinter/ttk/theme_selector.py
Normal file
61
Demo/tkinter/ttk/theme_selector.py
Normal file
@@ -0,0 +1,61 @@
|
||||
"""Ttk Theme Selector v2.
|
||||
|
||||
This is an improvement from the other theme selector (themes_combo.py)
|
||||
since now you can notice theme changes in Ttk Combobox, Ttk Frame,
|
||||
Ttk Label and Ttk Button.
|
||||
"""
|
||||
import Tkinter
|
||||
import ttk
|
||||
|
||||
class App(ttk.Frame):
|
||||
def __init__(self):
|
||||
ttk.Frame.__init__(self, borderwidth=3)
|
||||
|
||||
self.style = ttk.Style()
|
||||
|
||||
# XXX Ideally I wouldn't want to create a Tkinter.IntVar to make
|
||||
# it works with Checkbutton variable option.
|
||||
self.theme_autochange = Tkinter.IntVar(self, 0)
|
||||
self._setup_widgets()
|
||||
|
||||
def _change_theme(self):
|
||||
self.style.theme_use(self.themes_combo.get())
|
||||
|
||||
def _theme_sel_changed(self, widget):
|
||||
if self.theme_autochange.get():
|
||||
self._change_theme()
|
||||
|
||||
def _setup_widgets(self):
|
||||
themes_lbl = ttk.Label(self, text="Themes")
|
||||
|
||||
themes = self.style.theme_names()
|
||||
self.themes_combo = ttk.Combobox(self, values=themes, state="readonly")
|
||||
self.themes_combo.set(themes[0])
|
||||
self.themes_combo.bind("<<ComboboxSelected>>", self._theme_sel_changed)
|
||||
|
||||
change_btn = ttk.Button(self, text='Change Theme',
|
||||
command=self._change_theme)
|
||||
|
||||
theme_change_checkbtn = ttk.Checkbutton(self,
|
||||
text="Change themes when combobox item is activated",
|
||||
variable=self.theme_autochange)
|
||||
|
||||
themes_lbl.grid(ipadx=6, sticky="w")
|
||||
self.themes_combo.grid(row=0, column=1, padx=6, sticky="ew")
|
||||
change_btn.grid(row=0, column=2, padx=6, sticky="e")
|
||||
theme_change_checkbtn.grid(row=1, columnspan=3, sticky="w", pady=6)
|
||||
|
||||
top = self.winfo_toplevel()
|
||||
top.rowconfigure(0, weight=1)
|
||||
top.columnconfigure(0, weight=1)
|
||||
self.columnconfigure(1, weight=1)
|
||||
self.grid(row=0, column=0, sticky="nsew", columnspan=3, rowspan=2)
|
||||
|
||||
|
||||
def main():
|
||||
app = App()
|
||||
app.master.title("Theme Selector")
|
||||
app.mainloop()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user