본문 바로가기

[Tkinter] 44강 Menu 위젯으로 메뉴바 만들기

@도마22026. 2. 11. 21:00
728x90


이 강의는 Tkinter GUI 강의 44강입니다

43강에서는
스타일 코드를 UI 코드에서 분리하며
프로그램 구조를 정리했습니다.

이번 강의에서는
GUI 프로그램의 상징과도 같은
메뉴바(Menu Bar) 를 만듭니다.

이번 강의의 목표는 분명합니다.
Menu 위젯의 구조를 이해하고
메뉴가 어떻게 명령(command)을 연결하는지 파악하는 것입니다.


메뉴바는 왜 중요한가

메뉴바가 추가되는 순간
프로그램의 인상이
완전히 달라집니다.

  • 단순 창 → 프로그램
  • 버튼 중심 → 명령 중심
  • 기능 구조가 한눈에 보임

즉,
메뉴바는
프로그램의 기능 지도입니다.


Tkinter 메뉴 구조 한눈에 보기

Tkinter 메뉴는
다음 구조를 가집니다.

MenuBar
 ├─ Menu (파일)
 │   ├─ 명령
 │   ├─ 명령
 └─ Menu (도움말)
     ├─ 명령

메뉴바 아래에
여러 개의 메뉴가
달리는 구조입니다.


Menu 위젯 기본 생성 방법

메뉴바는
Menu 객체로 만듭니다.

menu_bar = tk.Menu(window)
window.config(menu=menu_bar)
이 두 줄이
메뉴바의 시작입니다.

가장 기본적인 메뉴바 예제

import tkinter as tk

window = tk.Tk()
window.geometry("300x200")

menu_bar = tk.Menu(window)
window.config(menu=menu_bar)

window.mainloop()

아직은
메뉴 항목이
없는 상태입니다.


메뉴(Menu) 추가하기

메뉴바에
실제 메뉴를
하나 추가해 봅니다.

file_menu = tk.Menu(menu_bar, tearoff=0)
menu_bar.add_cascade(label="파일", menu=file_menu)

 

  • label : 메뉴 이름
  • tearoff=0 : 메뉴 분리 방지

메뉴에 명령 추가하기

메뉴의 핵심은
명령입니다.

def open_file():
    print("파일 열기")

file_menu.add_command(label="열기", command=open_file)

 

메뉴 클릭 시
함수가 실행됩니다.


파일 메뉴 전체 예제

import tkinter as tk

window = tk.Tk()
window.geometry("300x200")

def open_file():
    print("파일 열기")

def exit_app():
    window.quit()

menu_bar = tk.Menu(window)
window.config(menu=menu_bar)

file_menu = tk.Menu(menu_bar, tearoff=0)
menu_bar.add_cascade(label="파일", menu=file_menu)

file_menu.add_command(label="열기", command=open_file)
file_menu.add_separator()
file_menu.add_command(label="종료", command=exit_app)

window.mainloop()

이제
실제 프로그램처럼
동작합니다.


add_separator로 구분선 추가하기

메뉴 항목 사이에는
구분선을 넣을 수 있습니다.

file_menu.add_separator()

기능 그룹을
시각적으로 나누는 데
아주 유용합니다.


여러 메뉴 추가하기

메뉴바에는
여러 개의 메뉴를
추가할 수 있습니다.

help_menu = tk.Menu(menu_bar, tearoff=0)
menu_bar.add_cascade(label="도움말", menu=help_menu)
help_menu.add_command(label="정보", command=show_info)

프로그램의
기능 구조가
점점 보이기 시작합니다.


메뉴는 command 방식만 사용한다

중요한 특징 하나입니다.

Menu 위젯은
bind를 사용하지 않습니다.

  • 메뉴 클릭 → command 실행
  • 이벤트 객체 없음

즉,
메뉴는
“명령 실행”에
특화된 UI입니다.


메뉴 설계 시 사고 방식

메뉴를 설계할 때는
이 기준을 추천합니다.

  • 버튼 → 자주 쓰는 기능
  • 메뉴 → 기능 묶음

모든 기능을
메뉴로 옮길 필요는 없습니다.


메뉴는 기능 구조를 드러낸다

메뉴를 만들다 보면
이런 질문이 생깁니다.

  • 이 기능은 어디에 속하지?
  • 이 메뉴 이름이 맞나?

이 고민 자체가
프로그램 구조 설계입니다.


이번 강의 핵심 정리

이번 강의에서 꼭 기억해야 할 내용입니다.

  • Menu 위젯으로 메뉴바를 만든다
  • 메뉴바 → 메뉴 → 명령 구조다
  • add_command로 기능을 연결한다
  • 메뉴는 프로그램 구조를 보여준다

다음 강의 예고

다음 강의에서는
서브 메뉴 구성하기를 다룹니다.

메뉴 구조가
한 단계 더
정교해집니다.


728x90
도마2
@도마2 :: 도마의 코드노트

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

목차