
이 강의는 Tkinter GUI 강의 46강입니다
45강에서는
서브 메뉴를 구성하며
메뉴를 계층 구조로 나누는 방법을 배웠습니다.
이번 강의에서는
한 단계 더 나아가
메뉴 명령(command)을 어떻게 구조적으로 설계해야 하는지를 다룹니다.
이번 강의의 목표는 분명합니다.
메뉴 클릭 코드를
정리된 명령 구조로 관리하는 방법을 익히는 것입니다.
메뉴가 커지면 생기는 문제
메뉴가 늘어날수록
이런 코드가 나오기 쉽습니다.
file_menu.add_command(label="열기", command=open_file)
file_menu.add_command(label="저장", command=save_file)
file_menu.add_command(label="다른이름저장", command=save_as)
file_menu.add_command(label="닫기", command=close_file)
기능은 동작하지만
문제는 이것입니다.
- 명령이 흩어져 있음
- 구조가 보이지 않음
- 유지보수가 어려움
메뉴 명령도 “기능 묶음”이 필요하다
메뉴 명령 역시
UI가 아니라
로직의 일부입니다.
따라서
다음 기준으로 정리하는 것이 좋습니다.
- 파일 관련 명령
- 편집 관련 명령
- 도움말 관련 명령
이걸 코드 구조로
드러내는 것이
이번 강의의 핵심입니다.
명령 함수를 먼저 묶어 보자
가장 먼저 할 일은
메뉴에서 사용할 함수들을 한곳에 모으는 것입니다.
def cmd_open():
print("파일 열기")
def cmd_save():
print("파일 저장")
def cmd_exit():
window.quit()
함수 이름에
cmd_ 접두어를 붙이면
의미가 분명해집니다.
메뉴 정의와 명령을 분리하자
이제
메뉴를 정의하는 코드에서는
함수 호출만 담당하게 합니다.
file_menu.add_command(label="열기", command=cmd_open)
file_menu.add_command(label="저장", command=cmd_save)
file_menu.add_separator()
file_menu.add_command(label="종료", command=cmd_exit)
메뉴 코드는
읽기 쉬워지고
의도가 분명해집니다.
메뉴 명령을 딕셔너리로 관리하기
메뉴가 더 많아지면
이런 방식도 유용합니다.
file_commands = {
"열기": cmd_open,
"저장": cmd_save,
"종료": cmd_exit
}
for label, command in file_commands.items():
file_menu.add_command(label=label, command=command)
메뉴 구조가
데이터처럼 보이기 시작합니다.
이 방식의 장점
이 구조의 장점은 다음과 같습니다.
- 메뉴 추가/삭제가 쉬움
- 명령 목록이 한눈에 보임
- 테스트와 수정이 간단함
즉,
메뉴가
설정 데이터처럼 관리됩니다.
메뉴 이름과 함수 이름을 분리하자
중요한 설계 포인트 하나입니다.
메뉴 이름 ≠ 함수 이름
- 메뉴 이름 → 사용자 기준
- 함수 이름 → 개발자 기준
이 분리를 하면
코드가 훨씬 오래갑니다.
잘못된 예와 좋은 예 비교
잘못된 예
def 열기():
pass
좋은 예
def cmd_open_file():
pass
이 차이는
프로젝트가 커질수록
엄청나게 커집니다.
메뉴 명령은 UI 로직이 아니다
메뉴 명령 함수 안에서는
다음만 하는 것이 좋습니다.
- 다른 함수 호출
- 화면 전환 트리거
복잡한 로직은
별도의 함수나 모듈로
옮기는 것이 좋습니다.
메뉴 명령 설계는 전체 구조 연습이다
메뉴를 정리하다 보면
이런 생각이 듭니다.
- 이 기능은 어디에 속하지?
- 이 메뉴 이름이 맞나?
이 고민이
바로
프로그램 설계 감각입니다.
이번 강의 핵심 정리
이번 강의에서 꼭 기억해야 할 내용입니다.
- 메뉴 명령도 구조적으로 관리해야 한다
- 명령 함수와 메뉴 정의를 분리한다
- 딕셔너리 구조가 유용하다
- 메뉴는 프로그램 구조를 드러낸다
다음 강의 예고
다음 강의에서는
팝업 메뉴(Context Menu) 를 다룹니다.
마우스 우클릭으로
또 다른 형태의
메뉴를 만들어 봅니다.
'⚙️ Python > 🪟 Tkinter 기초' 카테고리의 다른 글
| [Tkinter] 48강 messagebox 기본 사용법 (0) | 2026.02.13 |
|---|---|
| [Tkinter] 47강 팝업 메뉴 (Context Menu) 만들기 (0) | 2026.02.13 |
| [Tkinter] 45강 서브 메뉴 구성하기 (0) | 2026.02.12 |
| [Tkinter] 44강 Menu 위젯으로 메뉴바 만들기 (0) | 2026.02.11 |
| [Tkinter] 43강 스타일 코드 분리하기 (0) | 2026.02.11 |