Тема представляет коллекцию стилей. Все стили одно темы проектируются таким образом, чтобы визуально сочетаться друг с другом. Применение определенной темы означает, что к виджетам будут применяться стили из данной темы.
По умолчанию Tkinter уже предоставляет ряд тем. Чтобы их получить, можно использовать метод theme_names() класса ttk.Style
from tkinter import ttk
for theme in ttk.Style().theme_names():
print(theme)
Стоит учитывать, что на разных операционных системах свои встроенные темы.
Для получения текущей темы можно использовать метод theme_use()
current_theme = ttk.Style().theme_use() print(current_theme)
Для установки другой темы в этот метод в качестве параметра передается название темы:
from tkinter import *
from tkinter import ttk
root = Tk()
root.title("METANIT.COM")
root.geometry("250x200")
# устанавливаем тему "classic"
ttk.Style().theme_use("classic")
ttk.Button(text="Click").pack(anchor=CENTER, expand=1)
root.mainloop()
Подобным образом мы можем определить небольшое приложение для выбора из текущих тем:
from tkinter import *
from tkinter import ttk
root = Tk()
root.title("METANIT.COM")
root.geometry("250x200")
# выбранная тема
selected_theme = StringVar()
style = ttk.Style()
# изменение текущей темы
def change_theme():
style.theme_use(selected_theme.get())
ttk.Label(textvariable=selected_theme, font="Helvetica 13").pack(anchor=NW)
for theme in style.theme_names():
ttk.Radiobutton(text=theme,
value=theme,
variable=selected_theme,
command=change_theme).pack(anchor=NW)
root.mainloop()
В данном случае каждый элемент Radiobutton представляет определенную тему. При выборе определенной кнопки Radiobutton будет срабатывать функция
change_theme(), в которой будет изменены текущая тема: