Giao diện - Tkinter - Themes

Tkinter Themes

Summary: in this tutorial, you’ll learn how to change the Tkinter theme from one to another.

Introduction to Tkinter ttk themes

In Tkinter, a theme determines the “look & feel” of all the widgets. It’s a collection of styles for all the ttk widgets.

A style specifies the appearance of a widget class e.g., a Button. Each theme comes with a set of styles. It’s possible to change the appearance of widgets by:

  • Modifying the built-in styles
  • or creatting new styles

Tkinter allows you to change the current theme to another. When you change the current theme to a new one, Tkinter will apply the styles of that theme to all the ttk widgets.

To get the available themes, you use the theme_names() method of the ttk.Style instance.

First, create a new instance of the ttk.Style class:


 

style = ttk.Style(root)

Code language: Python (python)

Second, get the available themes by calling the theme_names() method:


 

style.theme_names()

Code language: Python (python)

To get the current theme, you use the theme_use() method:


 

current_theme = style.theme_use()

Code language: Python (python)

Note that every operating system (OS) such as Windows, macOS, and Linux comes with its own predefined themes. If you use the theme_names() and theme_use() methods on different OS, you’ll get different results.

To change the current theme to a new one, you pass the new theme name to the theme_use() method:


 

style.theme_use(theme_name)

Code language: Python (python)

The following program shows all themes in your system and allows you to change one theme to another:


 

import tkinter as tk from tkinter import ttk class App(tk.Tk): def __init__(self): super().__init__() # root window self.title('Theme Demo') self.geometry('400x300') self.style = ttk.Style(self) # label label = ttk.Label(self, text='Name:') label.grid(column=0, row=0, padx=10, pady=10, sticky='w') # entry textbox = ttk.Entry(self) textbox.grid(column=1, row=0, padx=10, pady=10, sticky='w') # button btn = ttk.Button(self, text='Show') btn.grid(column=2, row=0, padx=10, pady=10, sticky='w') # radio button self.selected_theme = tk.StringVar() theme_frame = ttk.LabelFrame(self, text='Themes') theme_frame.grid(padx=10, pady=10, ipadx=20, ipady=20, sticky='w') for theme_name in self.style.theme_names(): rb = ttk.Radiobutton( theme_frame, text=theme_name, value=theme_name, variable=self.selected_theme, command=self.change_theme) rb.pack(expand=True, fill='both') def change_theme(self): self.style.theme_use(self.selected_theme.get()) if __name__ == "__main__": app = App() app.mainloop()

Code language: Python (python)

In this example, when you select a theme from the radio button list, the change_theme() method will apply the selected theme.

If you run the program on Windows 10, you’ll see the following window:

Tkinter Theme

If you change the theme to classic, you’ll see the style of the widgets (LabelEntryButtonLabelFrame, and Radio Button) change to the following:

ttk Theme

Summary

  • Create an instance of the ttk.Style class to access the style database.
  • Use the style.theme_names() method to get available themes from the Operating System on which the Tkinter application is running.
  • Use the style.theme_use() method to change the current theme to a new one.

 



Chatbot Tư vấn Lộ trình CNTT 🤖
Chào bạn! Tôi có thể tư vấn về các lộ trình học CNTT dựa trên roadmap.w3typing.com. Hãy chọn một từ khóa dưới đây hoặc gõ câu hỏi của bạn (ví dụ: "Frontend", "Backend", "Python", "DevOps").