Tkinter 에서 드롭 다운 메뉴를 만드는 방법

Jinku Hu 2023년1월30일
  1. Tkinter OptionMenu 예제
  2. 값이 변경 될 때 명령을 OptionMenu 에 바인딩
Tkinter 에서 드롭 다운 메뉴를 만드는 방법

Tkinter 에서 드롭 다운 메뉴를 만드는 몇 가지 방법이 있습니다.

  1. Tkinter tutorial Combobox chapter에 소개 된대로 Combobox 를 사용하십시오.
  2. 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 는 생성 된 옵션 메뉴의 부모입니다.

variabletk.StringVar 타입을 가진 초기 텍스트 변수입니다.

* OptionList 는 다른 메뉴 옵션입니다. *는 여기에 list유형으로 컨테이너 포장 풀기에 사용됩니다.

Tkinter 옵션 메뉴 예

값이 변경 될 때 명령을 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)는 사용자가 변수를 쓰거나 선택할 때 콜백 함수를 호출한다는 의미입니다.

Tkinter 옵션 메뉴 콜백

작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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