메뉴 위젯은 메뉴에 메뉴 그룹을 추가하는 방식으로 되어있다. 파일 메뉴가 있으면, [신규, 저장, 열기 ... ] 이렇게 묶어서 계층을 만든다.
그밖에는 다른 위젯들과 비슷한 방식을 따른다. 마지막에 config 메소드를 호출하여 최상위 메뉴(mainmenu)를 등록해야 메뉴가 나타난다.
import tkinter as tk
def test():
print("Menu Pressed")
root = tk.Tk()
root.geometry('320x240')
root.title('Tkinter Test')
mainmenu = tk.Menu(root)
# FILE MENU
filem = tk.Menu(mainmenu, tearoff = 0)
filem.add_command(label = 'NEW', command = test)
filem.add_command(label = 'OPEN', command = test)
filem.add_command(label = 'SAVE', command = test)
filem.add_separator()
filem.add_command(label = 'EXIT', command = test)
mainmenu.add_cascade(label ='FILE', menu = filem)
filem2 = tk.Menu(mainmenu, tearoff = 0)
filem2.add_command(label = 'UNDO', command = test)
filem2.add_command(label = 'CUT', command = test)
filem2.add_command(label = 'COPY', command = test)
filem2.add_command(label = 'PASTE', command = test)
mainmenu.add_cascade(label ='EDIT', menu = filem2)
root.config(menu = mainmenu)
root.mainloop()
메뉴는 메뉸데 버튼으로 만든 매뉴이다. 프레임 안에 메뉴가 들어가 있다.(메뉴와의 차이점) 메뉴처럼 메뉴버튼에 항목들을 추가시켜야 된다.
import tkinter as tk
root = tk.Tk()
root.geometry('320x240')
root.title('Tkinter Test')
frame = tk.Frame(root)
frame.pack()
menubtn = tk.Menubutton(frame,text = "BROWSER", relief = "groove")
var1 = tk.IntVar()
var2 = tk.IntVar()
var3 = tk.IntVar()
menu1 = tk.Menu(menubtn)
menu1.add_checkbutton(label="CHROME", variable = var1)
menu1.add_checkbutton(label="SAFARI", variable = var2)
menu1.add_checkbutton(label="MS EDGE", variable = var3)
menubtn["menu"] = menu1
menubtn.pack()
root.mainloop()
콤보박스이다. 다른 위젯들과 같다.
import tkinter as tk
import tkinter.ttk as ttk
def getcombo():
print(combo1.get())
root = tk.Tk()
root.geometry('320x240')
root.title('Tkinter Test')
frame = tk.Frame(root)
frame.pack()
list1 = ['item1',
'item2',
'item3',
'item4',
'item5',
]
combo1 = ttk.Combobox(frame, values = list1)
combo1.set("Pick an Item")
combo1.pack(pady = 10)
btn = tk.Button(frame,text="OKAY", command = getcombo)
btn.pack()
root.mainloop()
리스트박스이다. 리스트 박스는 나열된 항목을 한번에 보여주는 장점이 있다.
import tkinter as tk
def settest():
print(listbox.curselection())
root = tk.Tk()
root.geometry('320x240')
root.title('Tkinter Test')
frame = tk.Frame(root)
frame.pack()
listbox = tk.Listbox(root)
listbox.insert(1,"APPLE")
listbox.insert(2,"BANANA")
listbox.insert(3,"ORANGE")
listbox.insert(4,"KIWI")
listbox.insert(5,"MANGO")
listbox.pack()
btn = tk.Button(frame,text="OKAY", command = settest)
btn.pack()
root.mainloop()
탑레벨 객체는 윈도우창을 하나 더 띄울때 사용한다. 메인 윈도우(root 라고 부르는)의 경우는 종료하면 모든 윈도우가 종료되는데 TopLevel 윈도우는 종료되도 자신의 위젯들만 종료된다. root의 서브 윈도우다. 서브 창이 필요할 때 사용한다.
import tkinter as tk
def set_test():
win2 = tk.Toplevel()
win2.geometry('200x150')
label = tk.Label(win2, text = 'This is 2nd Window')
label.pack(pady = 20)
root = tk.Tk()
root.geometry('320x240')
root.title('Tkinter Test')
frame = tk.Frame(root)
frame.pack()
btn = tk.Button(frame,text="OKAY", command = set_test)
btn.pack(pady = 20)
root.mainloop()