사용자와의 상호작용이 필요한 애플리케이션에서는 메뉴바(menu bar)가 필수적입니다. Tkinter에서는 Menu(parent) 객체를 초기화하고 여기에 메뉴 항목을 추가하는 방식으로 메뉴를 손쉽게 만들 수 있습니다.
특히 팝업 메뉴(popup menu)는 tk_popup(x_root, y_root, False) 메서드를 호출하여 생성하며, 이를 통해 화면 위에 메뉴가 정상적으로 표시되도록 보장할 수 있습니다. 그다음 마우스 오른쪽 버튼 클릭과 같은 이벤트에 팝업 메뉴를 연결하면 됩니다. 또한 grab_release() 메서드를 사용하면 마우스 버튼에서 입력 포커스(grab)를 해제하여 팝업 메뉴가 자연스럽게 닫히도록 처리할 수 있습니다.
예제 코드
# 필요한 라이브러리 임포트
from tkinter import *
from tkinter import ttk
# Tkinter 프레임 인스턴스 생성
win = Tk()
# 윈도우 크기 설정
win.geometry("700x350")
label = Label(win, text="메뉴를 표시하려면 아무 곳이나 마우스 오른쪽 버튼으로 클릭하세요", font=('Helvetica 18'))
label.pack(pady=40)
# 메뉴 추가
popup = Menu(win, tearoff=0)
# 메뉴 항목 추가
popup.add_command(label="New")
popup.add_command(label="Edit")
popup.add_separator()
popup.add_command(label="Save")
def menu_popup(event):
# 팝업 메뉴 표시
try:
popup.tk_popup(event.x_root, event.y_root, 0)
finally:
# grab 해제
popup.grab_release()
win.bind("", menu_popup)
button = ttk.Button(win, text="Quit", command=win.destroy)
button.pack()
mainloop() 실행 결과
위 코드를 실행하면 레이블(Label)과 버튼이 포함된 창이 나타납니다. 이 상태에서 마우스 오른쪽 버튼을 클릭하면 화면에 팝업 메뉴가 표시됩니다.

핵심 포인트 정리
- Menu(parent, tearoff=0): tearoff를 0으로 설정하면 메뉴 상단의 점선 분리선이 제거되어 깔끔한 팝업 메뉴를 만들 수 있습니다.
- add_command(label=...): 메뉴에 실행 가능한 항목을 추가합니다. add_separator()로 항목 사이에 구분선을 넣을 수 있습니다.
- bind("
", 함수) : 마우스 오른쪽 버튼 클릭 이벤트와 팝업 함수를 연결합니다. - grab_release(): finally 블록에서 반드시 호출해야 예외 발생 여부와 관계없이 마우스 포커스가 안전하게 해제됩니다.