Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Tkinter Combobox에서 선택한 옵션의 인덱스를 구하는 방법

Tkinter 애플리케이션에서 드롭다운 목록을 만들고 사용자가 항목을 선택할 수 있게 하려면 Combobox(콤보박스) 위젯을 사용하는 것이 가장 간단합니다. 콤보박스는 여러 옵션 중 하나를 즉시 선택할 수 있는 드롭다운 리스트를 제공합니다.

그런데 선택된 항목 자체뿐만 아니라 그 인덱스(위치)까지 알아야 할 때가 있습니다. 이때는 current() 메서드를 사용하면 됩니다. current()는 현재 선택된 항목의 인덱스를 정수형으로 반환하며, 아무것도 선택되지 않은 경우에는 -1을 반환합니다. 반면 get() 메서드는 선택된 항목의 문자열 값을 반환하므로, 두 메서드를 함께 활용하면 인덱스와 값 모두 손쉽게 얻을 수 있습니다.

예제 코드

다음 예제에서는 요일 목록이 담긴 드롭다운 콤보박스를 생성하고, 사용자가 요일을 선택할 때마다 해당 항목의 인덱스와 값을 Label 위젯에 출력합니다. 인덱스는 정수이므로 str()로 형 변환한 뒤 문자열과 연결합니다.

# 필요한 라이브러리 임포트
from tkinter import *
from tkinter import ttk

# tkinter 프레임(윈도우) 인스턴스 생성
win = Tk()

# 윈도우 크기 설정
win.geometry("700x350")

# 콤보박스를 초기화하는 함수
def clear_cb():
    cb.set('')
    
# 요일 튜플 정의
days= ('Sun','Mon','Tue','Wed','Thu','Fri','Sat')

# 콤보박스에서 선택된 옵션의 인덱스를 출력하는 함수
def callback(*arg):
    Label(win, text= "The value at index " + str(cb.current()) + " is" + " "+ str(var.get()), font= ('Helvetica 12')).pack()
    
# 콤보박스 위젯 생성
var= StringVar()
cb= ttk.Combobox(win, textvariable= var)
cb['values']= days
cb['state']= 'readonly'
cb.pack(fill='x',padx= 5, pady=5)

# 변수 값 변경 시 콜백이 호출되도록 trace 설정
var.trace('w', callback)

# 선택된 콤보박스 값을 지우는 버튼 생성
button= Button(win, text= "Clear", command= clear_cb)
button.pack()

win.mainloop()

코드 주요 포인트

- cb['state'] = 'readonly': 사용자가 임의의 텍스트를 직접 입력하지 못하고 목록에서만 선택하도록 제한합니다.
- var.trace('w', callback): StringVar 변수의 값이 변경될 때마다 callback 함수가 자동으로 실행됩니다.
- cb.current(): 선택된 항목의 인덱스를 정수로 반환합니다.
- Clear 버튼: clear_cb 함수를 통해 콤보박스의 선택값을 비웁니다.

실행 결과

위 코드를 실행하면 요일 목록이 있는 콤보박스가 화면에 표시됩니다. 목록에서 요일을 하나 선택할 때마다 "The value at index X is Y" 형태의 라벨이 새로 추가되며, 선택된 항목의 인덱스와 해당 값이 함께 나타납니다.

Tkinter Combobox에서 선택한 옵션의 인덱스를 구하는 방법