728x90

이 강의는 Tkinter GUI 강의 47강입니다
46강에서는
메뉴 명령을 구조적으로 설계하며
메뉴를 “설정 데이터”처럼 관리하는 방법을 배웠습니다.
이번 강의에서는
메뉴의 또 다른 형태인
팝업 메뉴(Context Menu) 를 만듭니다.
이번 강의의 목표는 분명합니다.
마우스 우클릭으로 열리는
보조 메뉴의 구조와 사용 시점을 이해하는 것입니다.
팝업 메뉴(Context Menu)란 무엇인가
팝업 메뉴는
마우스 우클릭 시 나타나는 메뉴입니다.
대표적인 예시는 다음과 같습니다.
- 파일 탐색기 우클릭 메뉴
- 텍스트 선택 후 우클릭
- 리스트 항목 우클릭
즉,
현재 상황(Context)에 맞는 명령을 제공하는 메뉴입니다.
팝업 메뉴는 언제 사용하면 좋을까
팝업 메뉴는
다음 조건에서 특히 유용합니다.
- 자주 쓰지는 않지만 필요한 기능
- 선택한 대상에만 적용되는 명령
- 화면을 복잡하게 만들고 싶지 않을 때
메뉴바를 대체하기보다는
보완하는 역할입니다.
팝업 메뉴도 Menu 위젯이다
중요한 점 하나입니다.
팝업 메뉴 역시 Menu 위젯이다.
차이점은
- 메뉴바에 연결하지 않고
- 마우스 이벤트로 직접 띄운다는 점입니다.
팝업 메뉴 기본 생성 방법
popup_menu = tk.Menu(window, tearoff=0)
구조 역시
기존 메뉴와
같습니다.
팝업 메뉴를 띄우는 핵심 코드
팝업 메뉴의 핵심은
이 한 줄입니다.
popup_menu.tk_popup(event.x_root, event.y_root)
- event.x_root
- event.y_root
→ 화면 기준 좌표입니다.
가장 기본적인 팝업 메뉴 예제
import tkinter as tk
window = tk.Tk()
window.geometry("320x220")
def on_delete():
print("삭제 선택")
def on_rename():
print("이름 변경 선택")
popup_menu = tk.Menu(window, tearoff=0)
popup_menu.add_command(label="삭제", command=on_delete)
popup_menu.add_command(label="이름 변경", command=on_rename)
def show_popup(event):
popup_menu.tk_popup(event.x_root, event.y_root)
window.bind("<Button-3>", show_popup)
window.mainloop()
창에서
우클릭하면
팝업 메뉴가 나타납니다.

특정 위젯에만 팝업 메뉴 적용하기
보통 팝업 메뉴는
특정 위젯에만 적용합니다.
label.bind("<Button-3>", show_popup)
이제
라벨 위에서만
우클릭 메뉴가 열립니다.
Listbox와 팝업 메뉴 함께 사용하기
팝업 메뉴는
Listbox와 궁합이 좋습니다.
import tkinter as tk
window = tk.Tk()
window.geometry("320x220")
listbox = tk.Listbox(window)
listbox.pack(fill="both", expand=True)
for item in ["항목1", "항목2", "항목3"]:
listbox.insert(tk.END, item)
def delete_item():
index = listbox.curselection()
if index:
listbox.delete(index[0])
popup_menu = tk.Menu(window, tearoff=0)
popup_menu.add_command(label="삭제", command=delete_item)
def show_popup(event):
popup_menu.tk_popup(event.x_root, event.y_root)
listbox.bind("<Button-3>", show_popup)
window.mainloop()
선택한 항목에
직접 동작하는
메뉴가 됩니다.

팝업 메뉴 설계 시 주의할 점
팝업 메뉴는
너무 많은 기능을 넣으면
오히려 불편해집니다.
권장 기준은 다음입니다.
- 해당 대상과 직접 관련된 기능만
- 3~5개 이내
- 자주 쓰는 순서대로 배치
메뉴바와 팝업 메뉴의 역할 분리
정리하면 다음과 같습니다.
- 메뉴바 → 전체 기능 구조
- 팝업 메뉴 → 상황별 빠른 명령
이 역할을
겹치지 않게 설계하는 것이
중요합니다.
이번 강의 핵심 정리
이번 강의에서 꼭 기억해야 할 내용입니다.
- 팝업 메뉴는 Menu 위젯으로 만든다
- 우클릭 이벤트로 직접 표시한다
- event.x_root, y_root 좌표를 사용한다
- 상황(Context)에 맞는 명령만 넣는다
다음 강의 예고
다음 강의에서는
messagebox 기본 사용법을 다룹니다.
이제
사용자에게
메시지를 전달하는 방법을
정리합니다.
728x90
'⚙️ Python > 🪟 Tkinter 기초' 카테고리의 다른 글
| [Tkinter] 49강 사용자 확인 다이얼로그 처리하기 (0) | 2026.02.14 |
|---|---|
| [Tkinter] 48강 messagebox 기본 사용법 (0) | 2026.02.13 |
| [Tkinter] 46강 메뉴 명령 구조 설계하기 (0) | 2026.02.12 |
| [Tkinter] 45강 서브 메뉴 구성하기 (0) | 2026.02.12 |
| [Tkinter] 44강 Menu 위젯으로 메뉴바 만들기 (0) | 2026.02.11 |