Introduction
Basic Widgets
Toplevel Widgets
Geometry Management
Binding Functions
Working with Images in Tkinter
Tkinter Advance
Applications and Projects
A popup menu, often referred to as a context menu or right-click menu, is a menu that appears upon user interaction, such as a right mouse button click. In Tkinter, you can create a popup menu using the Menu
widget.
Let's walk through creating a popup menu in Tkinter:
import tkinter as tk
Define a function that will display the popup menu. This function will be called when you right-click on the main window:
def show_popup(event): # Displays the popup menu at the pointer's location popup_menu.post(event.x_root, event.y_root)
root = tk.Tk() root.title("Popup Menu Example") root.geometry("300x200")
Use the Menu
widget to create the popup menu. You can add menu items using the add_command
method:
popup_menu = tk.Menu(root, tearoff=0) popup_menu.add_command(label="Option 1", command=lambda: print("Option 1 Selected")) popup_menu.add_command(label="Option 2", command=lambda: print("Option 2 Selected")) popup_menu.add_separator() popup_menu.add_command(label="Exit", command=root.quit)
Bind the right mouse button click (<Button-3>
) to the show_popup
function so that the popup menu is displayed when you right-click on the window:
root.bind("<Button-3>", show_popup)
Note: The event name for the right mouse button click can vary between systems. <Button-2>
might be used on some systems, especially on Macs. It's a good practice to test which event works for your target platform.
Here's the full code for the popup menu in Tkinter:
import tkinter as tk def show_popup(event): popup_menu.post(event.x_root, event.y_root) root = tk.Tk() root.title("Popup Menu Example") root.geometry("300x200") popup_menu = tk.Menu(root, tearoff=0) popup_menu.add_command(label="Option 1", command=lambda: print("Option 1 Selected")) popup_menu.add_command(label="Option 2", command=lambda: print("Option 2 Selected")) popup_menu.add_separator() popup_menu.add_command(label="Exit", command=root.quit) root.bind("<Button-3>", show_popup) root.mainloop()
With this, when you run the code and right-click on the main window, a popup menu will appear with the specified options. You can further enhance the menu by adding more functionalities or customizing its appearance as needed.
Python Tkinter context menu example:
import tkinter as tk def show_context_menu(event): context_menu.post(event.x_root, event.y_root) root = tk.Tk() root.title("Context Menu Example") context_menu = tk.Menu(root, tearoff=0) context_menu.add_command(label="Option 1") context_menu.add_command(label="Option 2") context_menu.add_separator() context_menu.add_command(label="Exit", command=root.destroy) label = tk.Label(root, text="Right-click to show the context menu") label.pack(padx=20, pady=20) # Bind the right-click event to the show_context_menu function root.bind("<Button-3>", show_context_menu) root.mainloop()
Popup menu on button click in Tkinter:
import tkinter as tk def show_popup_menu(): popup_menu.post(button.winfo_rootx(), button.winfo_rooty()) root = tk.Tk() root.title("Popup Menu Example") popup_menu = tk.Menu(root, tearoff=0) popup_menu.add_command(label="Option 1") popup_menu.add_command(label="Option 2") popup_menu.add_separator() popup_menu.add_command(label="Exit", command=root.destroy) button = tk.Button(root, text="Show Popup Menu", command=show_popup_menu) button.pack(padx=20, pady=20) root.mainloop()
Tkinter right-click menu on canvas/widget:
import tkinter as tk def show_context_menu(event): context_menu.post(event.x_root, event.y_root) root = tk.Tk() root.title("Right-Click Menu on Canvas Example") canvas = tk.Canvas(root, width=300, height=200, bg="white") canvas.pack() context_menu = tk.Menu(root, tearoff=0) context_menu.add_command(label="Draw Circle", command=lambda: canvas.create_oval(50, 50, 150, 150, outline="black")) context_menu.add_command(label="Draw Rectangle", command=lambda: canvas.create_rectangle(200, 50, 300, 150, outline="black")) context_menu.add_separator() context_menu.add_command(label="Exit", command=root.destroy) # Bind the right-click event to the show_context_menu function canvas.bind("<Button-3>", show_context_menu) root.mainloop()