Tkinter 튜토리얼-콤보 박스

  1. 파이썬 Tkinter 콤보 박스 예제
  2. Tkinter 콤보 박스 폰트
  3. Tkinter 콤보 박스 이벤트 바인딩
  4. Tkinter Combobox 의 동적 값 업데이트
  5. Tkinter 콤보 박스 읽기 전용

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

파이썬 Tkinter 콤보 박스 예제

Tkinter Combobox_Basic.py
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()메소드는 사용자가 드롭 다운 목록에서 요소를 선택할 때 콤보 박스 가상 이벤트와 콜백 함수를 바인딩하는 방법입니다.

Tkinter Combobox_Virtual Event Binding.py
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 콤보 박스 상태 비활성화