Tkinter 에서 드롭 다운 메뉴를 만드는 방법
Tkinter 에서 드롭 다운 메뉴를 만드는 몇 가지 방법이 있습니다.
- Tkinter tutorial Combobox chapter에 소개 된대로 Combobox 를 사용하십시오.
- OptionMenu Widget을 사용하십시오.
OptionMenu 는 Combobox 위젯과 약간 비슷하지만 이미 Tkinter 자체에 포함되어 있으므로 Combobox
의 경우처럼 ttk 를 가져올 필요가 없습니다.
Tkinter OptionMenu
예제
import tkinter as tk
OptionList = ["Aries", "Taurus", "Gemini", "Cancer"]
app = tk.Tk()
app.geometry("100x200")
variable = tk.StringVar(app)
variable.set(OptionList[0])
opt = tk.OptionMenu(app, variable, *OptionList)
opt.config(width=90, font=("Helvetica", 12))
opt.pack()
app.mainloop()
opt = tk.OptionMenu(app, variable, *OptionList)
app
는 생성 된 옵션 메뉴의 부모입니다.
variable
은 tk.StringVar
타입을 가진 초기 텍스트 변수입니다.
* OptionList
는 다른 메뉴 옵션입니다. *
는 여기에 list
유형으로 컨테이너 포장 풀기에 사용됩니다.
값이 변경 될 때 명령을 OptionMenu
에 바인딩
옵션 목록에서 새 값을 선택하면 OptionMenu
에서 명령을 연결할 수 없습니다. button widget처럼 콜백 함수를 단순히 연결할 수 없습니다.
tk.Button(app, text="Increase", width=30, command=change_label_number)
observer
콜백을 OptionMenu
변수에 첨부하려면 trace 메소드를 사용해야합니다. 변수가 변경 될 때마다 콜백 함수가 트리거됩니다.
OptionMenu
콜백 예
import tkinter as tk
OptionList = ["Aries", "Taurus", "Gemini", "Cancer"]
app = tk.Tk()
app.geometry("100x200")
variable = tk.StringVar(app)
variable.set(OptionList[0])
opt = tk.OptionMenu(app, variable, *OptionList)
opt.config(width=90, font=("Helvetica", 12))
opt.pack(side="top")
labelTest = tk.Label(text="", font=("Helvetica", 12), fg="red")
labelTest.pack(side="top")
def callback(*args):
labelTest.configure(text="The selected item is {}".format(variable.get()))
variable.trace("w", callback)
app.mainloop()
추적 ‘관찰자’에는 세 가지 모드가 있습니다.
관찰자 모드 | 설명 |
---|---|
w |
누군가가 ‘변수’를 쓸 때 |
r |
누군가가 ‘변수’를 읽을 때 |
u |
변수가 삭제 될 때 |
variable.trace( "w", callback)
는 사용자가 변수를 쓰거나 선택할 때 콜백 함수를 호출한다는 의미입니다.
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook