Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Tkinter에서 팝업 메뉴(Popup Menu) 만드는 방법 완벽 가이드

사용자와의 상호작용이 필요한 애플리케이션에서는 메뉴바(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)과 버튼이 포함된 창이 나타납니다. 이 상태에서 마우스 오른쪽 버튼을 클릭하면 화면에 팝업 메뉴가 표시됩니다.

Tkinter에서 팝업 메뉴(Popup Menu) 만드는 방법 완벽 가이드

핵심 포인트 정리

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