본문 바로가기

[Tkinter] 45강 서브 메뉴 구성하기

@도마22026. 2. 12. 18:00
728x90


이 강의는 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로 메뉴 안에 메뉴를 넣는다
  • 기능 묶음 기준으로 설계한다
  • 메뉴 깊이는 얕게 유지한다

다음 강의 예고

다음 강의에서는
메뉴 명령 구조를 더 체계적으로 설계하는 방법을 다룹니다.

메뉴가
단순 나열이 아니라
설계된 구조가 됩니다.


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

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

목차