본문 바로가기

[Tkinter] 47강 팝업 메뉴 (Context Menu) 만들기

@도마22026. 2. 13. 18:00
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
도마2
@도마2 :: 도마의 코드노트

초보자를 위한 코딩 강의를 정리합니다. 파이썬부터 C#, Unity 게임 제작까지 차근차근 기록합니다. — 도마

목차