In this video I’ll show you how to create and use your own Custom Styles for individual Widgets in Tkinter.

You can define a specific style and then apply it to an individual widget — like a single button, or all buttons.

We’ll use the ttk.Style() widget to do this.

Python Code: style_widget.py
(Github Code)

from tkinter import *
from tkinter import ttk
from ttkthemes import ThemedTk

root = ThemedTk()
root.title('Tkinter.com - Styles and Themes')
root.iconbitmap('c:/tkinter.com/images/codemy.ico')
root.geometry("500x350")


# Define style
style = ttk.Style(root)
style.theme_use("default")

# See included styles
print(ttk.Style().theme_names())
our_themes = ttk.Style().theme_names()
our_themes2 = root.get_themes()

# Change style
def changer(theme):
	# Change style
	style.theme_use(theme)
	my_label.config(text=f'Login - {theme} Theme')

# Create a Menu
my_menu = Menu(root)
root.config(menu=my_menu)

theme_menu = Menu(my_menu, tearoff=0)
my_menu.add_cascade(label="Themes", menu=theme_menu)

# Sub menu
for t in our_themes2:
	theme_menu.add_command(label=t, command=lambda t=t: changer(t))


# Create Our Widgets
# Header Label
my_label = ttk.Label(root, text="Login", font=("Helvetica", 18))
my_label.pack(pady=20)

# Login Frame
my_frame = ttk.Frame(root)
my_frame.pack(pady=20)

# Username and Password Entry Boxes and Labels
un_label = ttk.Label(my_frame, text="User Name: ")
un_label.grid(row=0, column=0, padx=10, pady=(20,5))

un_entry = ttk.Entry(my_frame)
un_entry.grid(row=0, column=1, padx=10, pady=(20,5))

pw_label = ttk.Label(my_frame, text="Password:")
pw_label.grid(row=1, column=0, padx=10, pady=(0,20))

pw_entry = ttk.Entry(my_frame, show="*")
pw_entry.grid(row=1, column=1, padx=20, pady=(0,20))


# Login Button
my_button = ttk.Button(root, text="Login")
my_button.pack(pady=0)


# Radio Buttons
radio_frame = Frame(root)
radio_frame.pack(pady=20)

var = IntVar()
my_radio1 = ttk.Radiobutton(radio_frame, text="Remember Me", variable=var, value=1,)
my_radio1.grid(row=0, column=0, padx=20)

my_radio1 = ttk.Radiobutton(radio_frame, text="Don't Remember Me", variable=var, value=2,)
my_radio1.grid(row=0, column=1)

root.mainloop()


John Elder

John is the CEO of Codemy.com where he teaches over 100,000 students how to code! He founded one of the Internet's earliest advertising networks and sold it to a publicly company at the height of the first dot com boom. After that he developed the award-winning Submission-Spider search engine submission software that's been used by over 3 million individuals, businesses, and governments in over 42 countries. He's written several Amazon #1 best selling books on coding, and runs a popular Youtube coding channel.

View all posts

Add comment

Your email address will not be published. Required fields are marked *

John Elder

John is the CEO of Codemy.com where he teaches over 100,000 students how to code! He founded one of the Internet's earliest advertising networks and sold it to a publicly company at the height of...