Introduction
Basic Widgets
Toplevel Widgets
Geometry Management
Binding Functions
Working with Images in Tkinter
Tkinter Advance
Applications and Projects
Adding an image to a button in Tkinter requires a few steps. This tutorial will guide you through using an image as a button in Tkinter.
To work with images in Tkinter, you'll need the PIL
(Pillow) library, which is an enhanced fork of the original PIL
(Python Imaging Library). You can install it via pip:
pip install Pillow
Now, import the required modules:
import tkinter as tk from tkinter import ttk from PIL import Image, ImageTk
Load the image using Image.open()
. Then, convert the image to a format suitable for Tkinter using ImageTk.PhotoImage()
:
image = Image.open("path_to_image.jpg") # Replace with your image path photo = ImageTk.PhotoImage(image)
Initialize the main application window:
root = tk.Tk() root.title("Image Button Example")
You can use the Button
widget from Tkinter and set its image
option to the photo image you loaded. If you want the button to also display text, you can use the compound
option:
button = ttk.Button(root, image=photo, text="Click Me!", compound=tk.LEFT, command=lambda: print("Button Clicked")) button.pack(pady=20)
The compound
option specifies the position of the text relative to the image. In the example above, the text is to the right of the image (tk.LEFT
). Other options include tk.TOP
, tk.BOTTOM
, tk.RIGHT
, and tk.CENTER
.
Here's the full code to create a Tkinter button with an image:
import tkinter as tk from tkinter import ttk from PIL import Image, ImageTk # Load the image image = Image.open("path_to_image.jpg") # Replace with your image path photo = ImageTk.PhotoImage(image) root = tk.Tk() root.title("Image Button Example") button = ttk.Button(root, image=photo, text="Click Me!", compound=tk.LEFT, command=lambda: print("Button Clicked")) button.pack(pady=20) root.mainloop()
Note: Remember to keep a reference to the image object (photo
in this case). If you don't, the image might not show up on the button due to Python's garbage collection. In the above example, this is not an issue because photo
is a global variable. However, if you're loading the image within a function, you may need to explicitly store a reference to the image object, e.g., button.image = photo
.
Python Tkinter add image to button example:
import tkinter as tk from tkinter import PhotoImage def on_button_click(): label.config(text="Button Clicked!") root = tk.Tk() root.title("Image Button Example") # Load an image image = PhotoImage(file="path/to/image.png") # Create a button with the image button = tk.Button(root, image=image, command=on_button_click) button.pack(pady=10) label = tk.Label(root, text="") label.pack() root.mainloop()
Creating an image button in Tkinter:
import tkinter as tk from tkinter import PhotoImage def on_image_button_click(): label.config(text="Image Button Clicked!") root = tk.Tk() root.title("Custom Image Button Example") # Load an image image = PhotoImage(file="path/to/image.png") # Create a button with the image and custom behavior image_button = tk.Button(root, image=image, command=on_image_button_click) image_button.pack(pady=10) label = tk.Label(root, text="") label.pack() root.mainloop()
Add icon to Tkinter button:
import tkinter as tk from tkinter import PhotoImage def on_icon_button_click(): label.config(text="Icon Button Clicked!") root = tk.Tk() root.title("Icon Button Example") # Load an icon image icon = PhotoImage(file="path/to/icon.png") # Create a button with the icon icon_button = tk.Button(root, image=icon, command=on_icon_button_click) icon_button.pack(pady=10) label = tk.Label(root, text="") label.pack() root.mainloop()
Tkinter button image size and placement:
import tkinter as tk from tkinter import PhotoImage def on_resized_button_click(): label.config(text="Resized Image Button Clicked!") root = tk.Tk() root.title("Resized Image Button Example") # Load an image original_image = PhotoImage(file="path/to/image.png") # Resize the image resized_image = original_image.subsample(2, 2) # Create a button with the resized image resized_button = tk.Button(root, image=resized_image, command=on_resized_button_click) resized_button.pack(pady=10) label = tk.Label(root, text="") label.pack() root.mainloop()
Embedding images in Tkinter buttons:
import tkinter as tk from tkinter import PhotoImage def on_embedded_button_click(): label.config(text="Embedded Image Button Clicked!") root = tk.Tk() root.title("Embedded Image Button Example") # Load an image embedded_button = tk.Button(root, text="Click Me", compound=tk.LEFT, command=on_embedded_button_click) embedded_button.pack(pady=10) label = tk.Label(root, text="") label.pack() root.mainloop()