tkinter 콤보박스 | 파이썬 GUI 3

tkinter 콤보박스

tkinter 콤보박스는 드롭다운 메뉴에서 선택하는 위젯입니다.

지난 학습처럼 향상된 tkinter 인 ttk.Combobox 객체를 사용해서 만들어 보겠습니다.

파이썬 tkinter 콤포박스

콤보박스 (combobox)

콤보박스는 드롭다운 메뉴로 값을 선택할 수 있는 위젯입니다.

# import
import tkinter
from tkinter import ttk
 
# instance
window = tkinter.Tk()
 
# title
window.title("First Window")
 
# geomerty
window.geometry('400x100')
 
# preventing GUI from resizing
window.resizable(False, False)
 
def buttonClicked():
    label.configure(foreground='blue')
    labelNew.configure(text='안녕하세요! ' + name.get() +
                       number.get() + '을 선택합니다.')
    # button.configure(state='disabled')
    textbox.focus()
 
# Label
label = ttk.Label(window, text="이름을 입력하세요")
label.grid(column=0, row=0)
 
# Button
button = ttk.Button(window, text="클릭", command=buttonClicked)
button.grid(column=2, row=1)
 
# Text Box
name = tkinter.StringVar()
textbox = ttk.Entry(window, width=12, textvariable=name)
textbox.grid(column=0, row=1)
 
# Label
labelNew = ttk.Label(window, text="")
labelNew.grid(column=1, row=2)
 
ttk.Label(window, text="| 숫자를 선택하세요: ").grid(column=1, row=0)
number = tkinter.StringVar()
comboBox = ttk.Combobox(window, width=12, textvariable=number)
comboBox['values'] = (2, 4, 6, 8, 10)
comboBox.grid(column=1, row=1)
comboBox.current(0)
 
# focus to Entry
textbox.focus()
 
# start GUI
window.mainloop()

소스코드가 약간 길지만 이전 학습에서 본 내용들입니다. 윈도우의 창의 속성을 정의하는 것은 이제 어렵지 않을 것 입니다.

ttk.Label(window, text="| 숫자를 선택하세요: ").grid(column=1, row=0)
number = tkinter.StringVar()
comboBox = ttk.Combobox(window, width=12, textvariable=number)
comboBox['values'] = (2, 4, 6, 8, 10)
comboBox.grid(column=1, row=1)
comboBox.current(0)

콤보박스는 ttk.Combobox 로 만들 수 있습니다. 루트 윈도우와 너비 그리고 textvariable 이라는 값을 교환할 변수를 StringVar 에 연결시킵니다. StringVar()는 일반 문자열이 아니라 tkinter 에서 사용하는 텍스트 문자열입니다.

언뜻 그냥 문자열을 사용해도 되는게 아니냐? 고 생각할 수 있지만 CLI 콘솔 환경에서 사용하는 문자열보다 GUI의 문자열은 더 많은 정보가 필요합니다. tkinter 뿐 아니라 다른 GUI도 보통은 text 문자열에 대한 별도의 객체를 사용합니다.

이 콤보박스의 값을 선택했을 때 number 변수에 값을 저장합니다. 버튼 액션 함수에 연결시킬 것입니다.

grid 메소드로 위치를 잡고 current(0) 은 콤보박스가 첫번째 요소를 선택한 상태로 만듭니다.

state에 readonly 옵션을 주면 사용자가 콤보박스의 값을 임의로 바꿀 수 없습니다.

Box = ttk.Combobox(window, width=12, textvariable=number, state='readonly')

요약

GUI를 여러개 다루어 보면 대체적으로 비슷합니다. C언어, 파이썬에 크로스 플랫폼인 QT 프레임워크 같은 경우도 클래스가 수천개 있는 것으로 알려져 있습니다.

클래스가 많은 것은 기존의 GUI에서 다양한 기능을 추가 하다 보니 일어나는 일 입니다. 아무래도 요즘 시대 윈도우 GUI가 과거 XP시절보다 세련되 보이는 것은 레이아웃 등 디자인 관련하여 보강되는 등 과정을 겪었기 때문입니다.

tkinter 는 사실 좀 굉장히 오래된 GUI 프레임워크긴 한데요. 그래도 간단한 프로젝트에는 쓸만합니다. 실전적인 프로그램을 만드는데는 몇가지 제약이 있지만 프로토타입을 만드는등 테스트나 개인 프로젝트에 사용할 가치는 충분합니다.

또 GUI 프로그래밍을 입문하는데 있어서 학습용으로 적합합니다. 최신의 GUI에 비하여 배우기가 매우 쉽기 때문입니다.

외부참조문서

tkinter — Tcl/Tk 파이썬 인터페이스 — Python 3.9.2 문서

Python GUI Programming With Tkinter – Real Python

Leave a Comment