TUTORIAL · Tkinter

Tkinter 튜토리얼 - 콤보 박스

Python Tkinter 콤보 박스의 튜토리얼

이 페이지의 내용

ttk.Combobox는 선택 항목의 드롭다운 목록이 있는 Tkinter 필드입니다. 그 values 옵션을 설정하여 목록을 채우고, current(index)를 호출하여 위치로 선택하고, get()을 사용하여 표시된 텍스트를 읽습니다. 채워진 목록이 첫 번째 항목을 자동으로 선택하지는 않습니다. 아래의 짧은 Python 예제는 창을 만들지 않고 인덱스와 텍스트의 관계를 보여줍니다. 이 가이드의 실제 위젯 스니펫은 제공된 실행 환경에 그래픽 디스플레이가 없기 때문에 인라인으로 표시됩니다. 선택 콜백에 대해서는 정확한 가상 이벤트 이름 <<ComboboxSelected>>를 바인딩하여 사용자가 항목을 선택할 때 핸들러가 응답하도록 하세요. (<<ComboboxSelected>>)

Python Tkinter ttk.Combobox 예제

이 작은 예제는 명시적인 선택이 그 위치와 표시된 텍스트에 어떻게 대응하는지 보여줍니다. Tk 창을 열지 않고 실행됩니다.

months = ["January", "February", "March", "April"]
selected_index = 1
selected_text = months[selected_index]
print(selected_index, selected_text)
1 February

위젯에 대해서는 from tkinter import ttk로 ttk를 가져오고, ttk.Combobox(parent, values=months)로 만들고, combo.current(1)로 초기 선택을 설정합니다. 인수 없는 current() 메서드는 선택한 항목의 인덱스를 반환합니다. get()은 그 표시된 텍스트를 반환합니다. 기본 normal 상태에서는 사용자가 목록에 없는 값을 입력할 수 있습니다. 그 경우 get()은 그 텍스트를 반환하고, 목록 항목과 일치하지 않으면 current()는 -1을 반환합니다.

Tkinter 튜토리얼 콤보 박스 기본

콤보 박스와 그 목록의 글꼴 설정하기

font 옵션은 Combobox 필드의 스타일을 지정합니다. 그 드롭다운 목록은 별도의 Tk 리스트박스이므로, 그 목록은 *TCombobox*Listbox.font 옵션 패턴으로 구성하세요. 예를 들어 필드용으로 ("Courier", 16, "bold") 같은 글꼴 튜플을 만들고, 목록을 열기 전에 app.option_add("*TCombobox*Listbox.font", ("Courier", 14))로 루트 창의 옵션을 설정합니다. 필드와 목록에 서로 다른 크기나 굵기가 필요하면 별도의 튜플을 사용하세요. 글꼴 패밀리의 사용 가능 여부는 운영 체제에 따라 다르며, 설치된 글꼴로 대체될 수 있습니다.

Tkinter 튜토리얼 콤보 박스 글꼴 설정

Combobox의 font만 설정하면 목록 텍스트가 시스템 기본 글꼴로 남을 수 있습니다. 드롭다운이 처음 열리기 전에 리스트박스 옵션을 구성하여 컨트롤의 두 부분 모두 의도한 스타일을 사용하도록 하세요.

콜백을 콤보 박스 선택에 바인딩하기

Tkinter는 선택 가상 이벤트를 <<ComboboxSelected>>라고 이름 붙입니다. 그 정확한 이름을 combo.bind("<<ComboboxSelected>>", show_selection)으로 바인딩하여 사용자가 목록에서 항목을 선택한 후에 함수를 실행하세요. 콜백이 Tkinter의 이벤트 객체를 받도록 정의하세요. 예를 들어 def show_selection(event): print("Selected:", event.widget.get())입니다. 사용자가 March를 선택하면 콜백은 Selected: March를 출력합니다. 이 이벤트는 사용자가 목록에서 선택할 때 생성됩니다. 코드에서 current()로 값을 설정하는 것은 사용자가 항목을 선택하는 것을 나타내지 않습니다.

콜백은 event.widget을 통해 이벤트를 발생시킨 위젯을 읽으므로, 필요하면 둘 이상의 Combobox에 재사용할 수도 있습니다. 콜백은 관련 레이블을 업데이트하거나 폼 값을 다시 계산하는 등 선택에 대한 응답에 집중하도록 유지하세요.

목록이 열리기 전에 콤보 박스 값 업데이트하기

사용자가 드롭다운을 열 때마다 선택 항목이 새로 고쳐져야 할 때는 postcommand 옵션을 사용하세요. Tkinter는 목록을 표시하기 직전에 할당된 함수를 호출하여 그 함수가 combo["values"]를 교체할 수 있게 합니다. 예를 들어 refresh_months() 함수는 ["July", "August", "September", "October"]를 할당할 수 있습니다. 이를 postcommand=refresh_months로 생성자에 전달하세요.

postcommand는 창이 생성될 때가 아니라 목록이 표시되기 전에 실행됩니다. 초기 목록에는 January부터 April까지 포함될 수 있고, 처음 열릴 때 사용 가능한 선택 항목이 July부터 October까지로 업데이트됩니다. 선택 항목이 변경되었다고 해서 표시된 텍스트가 자동으로 선택이 되지는 않습니다. 콜백은 드롭다운을 여는 과정의 일부로 실행되므로 빠르게 유지하세요.

Tkinter 튜토리얼 콤보 박스 postcommand

콤보 박스를 읽기 전용 또는 비활성화로 만들기

Combobox는 기본적으로 state="normal"을 사용하며, 사용자가 그 필드에 입력하고 목록 항목을 선택할 수 있습니다. 입력은 막으면서 목록에서의 선택은 허용하려면 state="readonly"를 설정하세요. 컨트롤을 사용할 수 없게 해야 할 때는 state="disabled"를 설정하세요. Tkinter는 이를 비활성으로 렌더링하고 상호작용을 막습니다. 예를 들어 ttk.Combobox(app, values=months, state="normal"), state="readonly" 또는 state="disabled"로 컨트롤을 만들어 창에서 이러한 모드를 비교하세요.

값이 제공된 선택 항목에서 나와야 하지만 사용자가 여전히 변경할 수 있어야 할 때는 readonly를 사용하세요. 값을 일시적으로 사용할 수 없거나 컨트롤이 정보 제공용일 때는 disabled를 사용하세요. 비활성화된 Combobox는 열 수도 편집할 수도 없습니다. 그 상태를 normal이나 readonly로 되돌리면 상호작용이 복원됩니다. 폼과 함께 사용할 수 있는 더 많은 Tkinter 위젯은 Tkinter Entry 튜토리얼과 Tkinter Button 튜토리얼을 참조하세요.