강의노트 Menu
강의노트
• 조회수 56
• 댓글 0
• 작성 1개월 전
• 수정 4주 전
Menu
프로그램의 메뉴바와 드롭다운 메뉴를 구현할 때 사용한다.
메뉴 항목으로는 command, checkbutton, radiobutton, cascade를 제공한다.
메뉴를 작성하는 방법은 파이썬같이 직관적이지 않은데 이는 tkinter의 프로그램 방식이기 때문이다.
메뉴를 쉽게 작성하는 방법은 다음 기본 구조와 같이
- 메뉴바를 생성한다.
- 메뉴바 항목의 드롭다운 메뉴 들을 만든다. (File, Edit, Help)
- 메뉴바에 메뉴를 추가한다.
기본 구조
import tkinter as tk
from tkinter import ttk
def new_file():
print("새 파일 생성!")
def open_file():
print("파일 열기!")
root = tk.Tk()
root.title("Menu 기본 예제")
root.geometry("300x200")
# 1. 메뉴바 생성
menubar = tk.Menu(root)
root.config(menu=menubar)
# 2. File 메뉴
file_menu = tk.Menu(menubar, tearoff=0) # tearoff=0 → 분리선 제거
file_menu.add_command(label="New", command=new_file)
file_menu.add_command(label="Open", command=open_file)
file_menu.add_separator() # 구분선
file_menu.add_command(label="Exit", command=root.quit)
# Edit 메뉴
edit_menu = tk.Menu(menubar, tearoff=0)
edit_menu.add_command(label="Undo")
edit_menu.add_command(label="Redo")
# Help 메뉴
help_menu = tk.Menu(menubar, tearoff=0)
help_menu.add_command(label="About", command=lambda: print("About 클릭"))
# 3. 메뉴바에 메뉴 추가
menubar.add_cascade(label="File", menu=file_menu)
menubar.add_cascade(label="Edit", menu=edit_menu)
menubar.add_cascade(label="Help", menu=help_menu)
root.mainloop()
메뉴 속성
속성 | 설명 |
---|---|
tearoff | 메뉴를 분리할 수 있는 점선 표시 여부 (0: 비활성화, 1: 활성화) |
add_command | 일반 메뉴 항목 추가 |
add_separator | 구분선 추가 |
add_cascade | 하위 메뉴 연결 |
add_checkbutton | 체크 박스 형태 메뉴 |
add_radiobutton | 라디오버튼 형태 메뉴 |
tearoff가 1인 경우
예제
체크 버튼 . 라디오 버튼 메뉴 예제
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.title("Menu 기본 예제")
root.geometry("300x200")
# 메뉴바 생성
menubar = tk.Menu(root)
root.config(menu=menubar)
# 변수 지정
check_var1 = tk.BooleanVar()
check_var2 = tk.BooleanVar()
radio_var = tk.StringVar(value="Option1")
# View 메뉴
view_menu = tk.Menu(menubar, tearoff=0)
view_menu.add_checkbutton(label="check 1", variable=check_var1)
view_menu.add_checkbutton(label="check 2", variable=check_var2)
view_menu.add_separator()
view_menu.add_radiobutton(label="radio 1", variable=radio_var, value="Option1")
view_menu.add_radiobutton(label="radio 2", variable=radio_var, value="Option2")
#메뉴바에 추가
menubar.add_cascade(label="View", menu=view_menu)
root.mainloop()
설명 :
체크 버튼 메뉴는 각 체크 버튼별 변수를 가져야 한다.
라디오버튼 메뉴는 같은 그룹에 있는 라디오 버튼 메뉴는 하나만 선택된다.
스타일 변경
기본 예제에 다음 명령어를 추가한다.
file_menu.configure(background='#333', foreground="white", activebackground='#555',activeforeground='red')
이미지 아이콘이 있는 메뉴
여기서 사용한 아이콘은 폴더 열기 아이콘 제작자: kmg design - Flaticon 의 것을 사용하였다.
시작전에 파일 열기 아이콘을 kmd design에서 다운받은 것을 프로그램과 같은 위치에 open.png로 저장한다.
from PIL import Image, ImageTk #1
original_image = Image.open("open.png") # 2
resized_image = original_image.resize((15, 15)) #3
open_image = ImageTk.PhotoImage(resized_image) #4
file_menu.add_command(label="Open", image=open_image, compound="left", command=open_file) #5
설명 :
- PIL 모듈을 설치하고 임포트한다.
- 이미지를 읽어서 original_image에 넣어두고
- 이 이미지의 크기를 (15,15)로 변경한다.
- 사이즈가 변경된 이미지를 tkinter가 읽어 들일수 있도록 Image.PhotoImage로 변경한다.
- file_menu에 이미지를 읽어 들이도록 설정한다.
연습문제
- 메뉴바에 Tools 메뉴를 추가하고, Settings 클릭 시 "환경설정" 메시지 출력한다. 정답 :
import tkinter as tk
from tkinter import messagebox
def show_settings():
messagebox.showinfo("Settings", "환경설정")
root = tk.Tk()
root.title("Menu Example")
menubar = tk.Menu(root)
# Tools 메뉴
tools_menu = tk.Menu(menubar, tearoff=0)
tools_menu.add_command(label="Settings", command=show_settings)
menubar.add_cascade(label="Tools", menu=tools_menu)
root.config(menu=menubar)
root.mainloop()
- View 메뉴에 Dark Mode 체크박스 메뉴 추가, 클릭 시 상태 출력한다. 정답 :
import tkinter as tk
def toggle_darkmode():
state = dark_mode_var.get()
if state:
print("Dark Mode: ON")
else:
print("Dark Mode: OFF")
root = tk.Tk()
root.title("Menu Example")
menubar = tk.Menu(root)
# View 메뉴
view_menu = tk.Menu(menubar, tearoff=0)
dark_mode_var = tk.BooleanVar()
view_menu.add_checkbutton(label="Dark Mode", variable=dark_mode_var, command=toggle_darkmode)
menubar.add_cascade(label="View", menu=view_menu)
root.config(menu=menubar)
root.mainloop()
- Help 메뉴에 Guide와 About 추가, 클릭 시 각각 "사용 설명서", "버전 정보" 출력한다. 정답 :
import tkinter as tk
from tkinter import messagebox
def show_guide():
messagebox.showinfo("Guide", "사용 설명서")
def show_about():
messagebox.showinfo("About", "버전 정보")
root = tk.Tk()
root.title("Menu Example")
menubar = tk.Menu(root)
# Help 메뉴
help_menu = tk.Menu(menubar, tearoff=0)
help_menu.add_command(label="Guide", command=show_guide)
help_menu.add_command(label="About", command=show_about)
menubar.add_cascade(label="Help", menu=help_menu)
root.config(menu=menubar)
root.mainloop()
- File 메뉴에 아이콘과 함께 New 추가 (왼쪽에 아이콘 표시)한다. 정답 :
import tkinter as tk
from tkinter import messagebox
def new_file():
messagebox.showinfo("New", "새 파일 생성")
root = tk.Tk()
root.title("Menu Example")
menubar = tk.Menu(root)
# 아이콘 준비 (작은 크기 GIF/PNG 권장)
icon = tk.PhotoImage(width=16, height=16)
# 단순 예시용 (빈 아이콘)
# File 메뉴
file_menu = tk.Menu(menubar, tearoff=0)
file_menu.add_command(label="New", image=icon, compound="left", command=new_file)
menubar.add_cascade(label="File", menu=file_menu)
root.config(menu=menubar)
root.mainloop()
이전 글
다음 글
로그인 하면 댓글을 쓸 수 있습니다.