How do I change the overall theme of a tkinter application?

The ttk themed widget in Tkinter allows you to change the visual appearance of your application by applying different themes. The ttk module uses the Tcl/Tk interpreter to provide access to native platform themes and custom styling options.

Available Themes

Tkinter's ttk module supports several built-in themes ?

  • winnative − Windows native look
  • clam − Clean, modern appearance
  • alt − Alternative styling
  • default − Standard tkinter theme
  • classic − Traditional Tk appearance
  • vista − Windows Vista style
  • xpnative − Windows XP native look

Checking Available Themes

You can check which themes are available on your system ?

import tkinter as tk
from tkinter import ttk

root = tk.Tk()
style = ttk.Style()

print("Available themes:")
for theme in style.theme_names():
    print(f"- {theme}")

root.destroy()
Available themes:
- winnative
- clam
- alt
- default
- classic
- vista
- xpnative

Changing the Theme

Use style.theme_use(theme_name) to change the overall theme ?

import tkinter as tk
from tkinter import ttk
from tkinter import messagebox

# Create main window
root = tk.Tk()
root.geometry("600x300")
root.title("Tkinter Theme Example")

# Create style object
style = ttk.Style()

# Set the theme to 'clam'
style.theme_use('clam')

# Function to display message
def show_message():
    messagebox.showinfo("Message", "You are learning Python Tkinter!")

# Create widgets
label = ttk.Label(root, text="Hey Folks, I have a Message for You!", 
                  font=('Arial', 16))
label.pack(pady=20)

button = ttk.Button(root, text="Show Message", command=show_message)
button.pack(pady=10)

# Add more widgets to show theme effect
frame = ttk.Frame(root, padding="10")
frame.pack(pady=10)

ttk.Label(frame, text="Enter your name:").grid(row=0, column=0, padx=5)
entry = ttk.Entry(frame, width=20)
entry.grid(row=0, column=1, padx=5)

root.mainloop()

Dynamically Changing Themes

You can create a theme selector to switch between themes at runtime ?

import tkinter as tk
from tkinter import ttk

root = tk.Tk()
root.geometry("500x250")
root.title("Dynamic Theme Changer")

style = ttk.Style()

def change_theme():
    selected_theme = theme_var.get()
    style.theme_use(selected_theme)
    current_label.config(text=f"Current theme: {selected_theme}")

# Theme selection
theme_var = tk.StringVar(value="clam")
theme_frame = ttk.LabelFrame(root, text="Select Theme", padding="10")
theme_frame.pack(pady=20, padx=20, fill="x")

for theme in style.theme_names():
    ttk.Radiobutton(theme_frame, text=theme.capitalize(), 
                   variable=theme_var, value=theme, 
                   command=change_theme).pack(side="left", padx=5)

# Sample widgets to show theme effect
sample_frame = ttk.LabelFrame(root, text="Sample Widgets", padding="10")
sample_frame.pack(pady=10, padx=20, fill="both", expand=True)

ttk.Label(sample_frame, text="Sample Label").pack(pady=5)
ttk.Button(sample_frame, text="Sample Button").pack(pady=5)

progress = ttk.Progressbar(sample_frame, length=200, value=75)
progress.pack(pady=5)

current_label = ttk.Label(root, text=f"Current theme: {theme_var.get()}", 
                         font=('Arial', 10, 'italic'))
current_label.pack(pady=5)

root.mainloop()

Theme Comparison

Theme Platform Appearance
winnative Windows Native Windows look
clam Cross-platform Clean, modern style
classic Cross-platform Traditional Tk appearance
alt Cross-platform Alternative styling
vista Windows Windows Vista style

Best Practices

  • Set the theme early in your application before creating widgets
  • Use clam theme for a modern, cross-platform appearance
  • Check available themes on different platforms as they may vary
  • Combine themes with custom styling for unique appearances

Conclusion

Use ttk.Style().theme_use() to change your tkinter application's theme. The clam theme provides a modern look across platforms, while platform-specific themes like winnative offer native appearance.

Updated on: 2026-03-25T22:28:15+05:30

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements