Tkinter 튜토리얼-콤보 박스

Jinku Hu 2023년1월30일 2020년4월4일 Tkinter Tkinter Combobox
  1. 파이썬 Tkinter 콤보 박스 예제
  2. Tkinter 콤보 박스 폰트
  3. Tkinter 콤보 박스 이벤트 바인딩
  4. Tkinter Combobox 의 동적 값 업데이트
  5. Tkinter 콤보 박스 읽기 전용
Tkinter 튜토리얼-콤보 박스

Tkinter Combobox 는 사용자가 선택할 수있는 드롭 다운 목록입니다. 보시는 바와 같이 Entrydrop-down 위젯의 조합입니다. 왼쪽의 화살표를 클릭하면 모든 선택 사항을 보여주는 드롭 다운 메뉴가 표시되고 하나를 클릭하면 현재 ‘항목’내용이 바뀝니다.

파이썬 Tkinter 콤보 박스 예제

import tkinter as tk
from tkinter import ttk
 
app = tk.Tk() 
app.geometry('200x100')

labelTop = tk.Label(app,
                    text = "Choose your favourite month")
labelTop.grid(column=0, row=0)

comboExample = ttk.Combobox(app, 
                            values=[
                                    "January", 
                                    "February",
                                    "March",
                                    "April"])
pprint(dict(comboExample)) 
comboExample.grid(column=0, row=1)
comboExample.current(1)

print(comboExample.current(), comboExample.get())

app.mainloop()

Tkinter 튜토리얼 콤보 박스 기본

from tkinter import ttk

Tkinter Combobox 위젯은 Tkinter 의 ttk 모듈에 있으므로이 위젯을 사용하려면이 모듈을 가져와야합니다.

comboExample = ttk.Combobox(app, 
                            values=[
                                    "January", 
                                    "February",
                                    "March",
                                    "April"])

Tkinter 콤보 박스 위젯 인스턴스를 생성하고 드롭 다운 목록에 나타날 값을 할당합니다.

comboExample.current(1)

일반적으로 콤보 상자에 표시되는 기본 항목은 값 목록의 첫 번째 요소입니다. current(index)메소드를 사용하여 임의의 요소로 변경할 수도 있습니다.

print(comboExample.current(), comboExample.get())

current()를 사용하여 현재 선택된 요소의 색인을 얻고 get()메소드를 사용하여 요소 자체를 가져올 수도 있습니다.

Tkinter 콤보 박스 폰트

Combobox 의 글꼴이 올바르게 구성되도록 목표를 달성하려면 Combobox 와 목록 상자 모두에 글꼴을 설정해야합니다.

import tkinter as tk
from tkinter import ttk
 
app = tk.Tk() 
app.geometry('300x100')

labelTop = tk.Label(app,
                    text = "Choose your favourite month")
labelTop.grid(column=0, row=0)

fontExample = ("Courier", 16, "bold")
comboExample = ttk.Combobox(app, 
                            values=[
                                    "January", 
                                    "February",
                                    "March",
                                    "April"],
                            font = fontExample)

app.option_add('*TCombobox*Listbox.font', fontExample)




comboExample.grid(column=0, row=1)

app.mainloop()

Tkinter Tutorial 콤보 박스 폰트 설정

fontExample = ("Courier", 16, "bold")
comboExample = ttk.Combobox(app, 
                            values=[
                                    "January", 
                                    "February",
                                    "March",
                                    "April"],
                            font = fontExample)

Tkinter 폰트는 font-family, size, weight (bold 또는 normal), slant (italic 또는 roman) 등의 옵션이있는 튜플로 지정할 수 있습니다. 폰트 튜플은 font = fontExample 에 의한 콤보 박스.

app.option_add('*TCombobox*Listbox.font', fontExample)

또한 Combobox 목록 상자의 글꼴을 지정해야합니다. 그렇지 않으면 Combobox 목록의 텍스트는 여전히 시스템 기본 글꼴을 사용하지만 Combobox 에 지정된 결함은 사용하지 않습니다.

Tkinter 콤보 박스 이벤트 바인딩

콤보 박스 콜백 함수 바인딩은 마지막 챕터에서 소개 된 위젯과 다릅니다. bind()메소드는 사용자가 드롭 다운 목록에서 요소를 선택할 때 콤보 박스 가상 이벤트와 콜백 함수를 바인딩하는 방법입니다.

import tkinter as tk
from tkinter import ttk

def callbackFunc(event):
     print("New Element Selected")
     
app = tk.Tk() 
app.geometry('200x100')

labelTop = tk.Label(app,
                    text = "Choose your favourite month")
labelTop.grid(column=0, row=0)

comboExample = ttk.Combobox(app, 
                            values=[
                                    "January", 
                                    "February",
                                    "March",
                                    "April"])


comboExample.grid(column=0, row=1)
comboExample.current(1)

comboExample.bind("<<ComboboxSelected>>", callbackFunc)


app.mainloop()
def callbackFunc(event):
     print("New Element Selected")

목록에서 요소를 선택할 때마다 정의 된 콜백 함수입니다.

노트
event 는 전달 인수로 건너 뛰지 않아야하며, 콤보 박스 가상 이벤트에서 전달됩니다.
comboExample.bind("<<ComboboxSelected>>", callbackFunc)

콜백 함수와 함께 가상 이벤트<< ComboboxSelected >>를 바인딩합니다.

목록에서 새 요소를 선택할 때마다 ‘새 요소 선택됨’이 인쇄됩니다.

Tkinter Combobox 의 동적 값 업데이트

Tkinter 콤보 박스의 선택 목록은 팝업 기능의 선택 목록을 표시하기 전에 주어진 기능을 실행하는 postcommand 옵션으로 동적으로 업데이트 할 수 있습니다.

import tkinter as tk
from tkinter import ttk

def callbackFunc(event):
     print("New Element Selected")
     
app = tk.Tk() 
app.geometry('200x100')

def changeMonth():
    comboExample["values"] = ["July",
                              "August",
                              "September",
                              "October"
                                ]

labelTop = tk.Label(app,
                    text = "Choose your favourite month")
labelTop.grid(column=0, row=0)

comboExample = ttk.Combobox(app, 
                            values=[
                                    "January", 
                                    "February",
                                    "March",
                                    "April"],
                            postcommand=changeMonth)


comboExample.grid(column=0, row=1)

app.mainloop()

changeMonth 함수는 콤보 박스 선택 목록을 다음과 같이 변경합니다.

["July",
 "August",
 "September",
 "October"
]

GUI 가 시작된 후 콤보 상자가 비어 있고 사용자가 콤보 상자에서 화살표를 클릭하면 위와 같이 주어진 달이 표시됩니다.

Tkinter Tutorial 콤보 박스 사령부

Tkinter 콤보 박스 읽기 전용

텍스트 상자를 직접 편집 할 수있는 기본 상태 인 ‘표준’이므로 위에 표시된 콤보 박스 예제의 요소 내용을 편집 할 수 있습니다.

Tkinter Combobox 에는 normal외에 다른 두 가지 상태가 있습니다.

  • ‘읽기 전용’-텍스트 필드를 편집 할 수 없으며 사용자는 드롭 다운 목록에서만 값을 선택할 수 있습니다.
  • 비활성화-콤보 박스가 회색으로 표시되어 상호 작용이 불가능합니다.
import tkinter as tk
from tkinter import ttk
 
app = tk.Tk() 
app.geometry('200x100')

labelTop = tk.Label(app,
                    text = "Choose your favourite month")
labelTop.grid(column=0, row=0)

comboExample = ttk.Combobox(app, 
                            values=[
                                    "January", 
                                    "February",
                                    "March",
                                    "April"],
                            state="readonly")

comboExample.grid(column=0, row=1)
comboExample.current(0)

print(comboExample.current(), comboExample.get())

app.mainloop()

위의 예는 Tkinter Combobox 읽기 전용을 설정합니다.

상태를 readonly 에서 disabled 로 변경하면 아래 그림과 같이 콤보 박스가 회색으로 표시됩니다.

Tkinter 콤보 박스 상태 비활성화

Author: 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