
이 강의는 Tkinter GUI 강의 45강입니다
44강에서는
Menu 위젯을 사용해
메뉴바와 기본 메뉴를 만드는 방법을 배웠습니다.
이번 강의에서는
메뉴 안에 메뉴를 넣는
서브 메뉴(Sub Menu) 를 구성합니다.
이번 강의의 목표는 분명합니다.
메뉴 구조를
기능 묶음 단위로 정리하는 방법을 이해하는 것입니다.
서브 메뉴는 언제 필요한가
메뉴가 단순할 때는
한 단계 메뉴로도 충분합니다.
하지만 기능이 늘어나면
이런 문제가 생깁니다.
- 메뉴 항목이 너무 많아짐
- 비슷한 기능이 섞임
- 메뉴를 찾기 어려움
이때 필요한 것이
서브 메뉴입니다.
메뉴 구조 다시 정리하기
서브 메뉴를 포함한
전체 구조는 다음과 같습니다.
MenuBar
└─ Menu (파일)
├─ Menu (새로 만들기)
│ ├─ 명령
│ └─ 명령
├─ 명령
└─ 명령
메뉴도
계층 구조를 가집니다.
서브 메뉴도 Menu 객체다
중요한 점 하나입니다.
서브 메뉴 역시 Menu 객체입니다.
즉,
메뉴 안에
다른 Menu를 넣는 구조입니다.
서브 메뉴 기본 생성 방식
sub_menu = tk.Menu(file_menu, tearoff=0)
file_menu.add_cascade(label="새로 만들기", menu=sub_menu)
부모는 menu_bar가 아니라
상위 메뉴(file_menu) 입니다.
가장 기본적인 서브 메뉴 예제
import tkinter as tk
window = tk.Tk()
window.geometry("320x220")
def new_text():
print("텍스트 파일 생성")
def new_project():
print("프로젝트 생성")
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)
new_menu = tk.Menu(file_menu, tearoff=0)
file_menu.add_cascade(label="새로 만들기", menu=new_menu)
new_menu.add_command(label="텍스트 파일", command=new_text)
new_menu.add_command(label="프로젝트", command=new_project)
window.mainloop()
이제
메뉴 안에
메뉴가 생깁니다.

서브 메뉴는 기능 묶음이다
서브 메뉴를 만들 때
중요한 기준은 이것입니다.
- 같은 성격의 기능인가
- 같은 흐름에서 쓰이는가
예를 들어:
- 새로 만들기
- 가져오기
- 내보내기
이런 것들은
서브 메뉴로 묶기 좋습니다.
서브 메뉴에도 구분선을 사용할 수 있다
서브 메뉴 역시
구분선을 사용할 수 있습니다.
new_menu.add_separator()
메뉴 깊이가 깊어질수록
구분선은
가독성에 큰 도움을 줍니다.
너무 깊은 메뉴는 피하자
메뉴 구조에서
주의할 점도 있습니다.
X 메뉴 → 메뉴 → 메뉴 → 메뉴
X 3단계 이상 중첩
이렇게 되면
사용자가 길을 잃습니다.
실무 기준으로는
2단계까지가 적당합니다.
서브 메뉴 설계가 중요한 이유
서브 메뉴를 설계하다 보면
이런 고민을 하게 됩니다.
- 이 기능은 어디에 속하지?
- 이 이름이 직관적인가?
이 고민 자체가
프로그램 구조 설계입니다.
메뉴 이름은 동작 기준으로 정하자
좋은 메뉴 이름의 기준은
다음과 같습니다.
- 명사보다는 동사
- 기능을 바로 예측 가능
예:
- 새로 만들기
- 불러오기
- 저장하기
버튼과 메뉴의 역할 구분
다시 한 번 정리하면:
- 버튼 → 자주 쓰는 핵심 기능
- 메뉴 → 전체 기능 목록
모든 기능을
버튼으로 만들 필요도,
메뉴로 만들 필요도 없습니다.
이번 강의 핵심 정리
이번 강의에서 꼭 기억해야 할 내용입니다.
- 서브 메뉴도 Menu 객체다
- add_cascade로 메뉴 안에 메뉴를 넣는다
- 기능 묶음 기준으로 설계한다
- 메뉴 깊이는 얕게 유지한다
다음 강의 예고
다음 강의에서는
메뉴 명령 구조를 더 체계적으로 설계하는 방법을 다룹니다.
메뉴가
단순 나열이 아니라
설계된 구조가 됩니다.
'⚙️ Python > 🪟 Tkinter 기초' 카테고리의 다른 글
| [Tkinter] 47강 팝업 메뉴 (Context Menu) 만들기 (0) | 2026.02.13 |
|---|---|
| [Tkinter] 46강 메뉴 명령 구조 설계하기 (0) | 2026.02.12 |
| [Tkinter] 44강 Menu 위젯으로 메뉴바 만들기 (0) | 2026.02.11 |
| [Tkinter] 43강 스타일 코드 분리하기 (0) | 2026.02.11 |
| [Tkinter] 42강 공통 스타일 설계 방법 (0) | 2026.02.10 |