Tkinter의 Listbox 위젯은 여러 항목을 목록 형태로 표시할 때 사용하는 대표적인 GUI 요소입니다. 목록에 추가된 각 항목에는 세로 방향 순서대로 인덱스가 순차적으로 할당됩니다.
그렇다면 사용자가 클릭한 항목의 인덱스를 어떻게 알아낼 수 있을까요? 핵심은 curselection() 메서드입니다. 이 메서드는 현재 선택된 항목의 인덱스를 튜플(tuple) 형태로 반환하며, 이 값을 활용하면 선택된 항목이 몇 번째 위치에 있는지 손쉽게 확인할 수 있습니다.
구현 원리
먼저 버튼을 하나 생성하고, 버튼이 클릭되었을 때 실행될 콜백 함수 안에서 list.curselection() 메서드로 현재 선택 상태를 가져옵니다. 그다음 반환된 인덱스를 출력하거나, 필요하다면 get() 메서드를 함께 사용해 해당 인덱스의 실제 항목 내용까지 조회할 수 있습니다.
예제 코드
# 필요한 라이브러리 임포트
from tkinter import *
# Tkinter 프레임(윈도우) 인스턴스 생성
win = Tk()
# 윈도우 크기 설정
win.geometry("700x350")
# Listbox 위젯 생성
lb = Listbox(win, width=100, height=10, font=('Times 13'), selectbackground="black")
lb.pack()
# 선택된 항목의 인덱스를 출력하는 함수 정의
def save():
for item in lb.curselection():
print("You have selected " + str(item+1))
# Listbox에 항목 추가
lb.insert("end", "A", "B", "C", "D", "E", "F")
# 선택 항목을 확인하는 버튼 추가
Button(win, text="Save", command=save).pack()
win.mainloop()실행 결과
위 코드를 실행하면 A부터 F까지의 알파벳 목록이 담긴 창이 나타납니다.
목록에서 항목을 하나 선택한 뒤 [Save] 버튼을 클릭하면, 콘솔에 선택된 항목의 인덱스가 출력됩니다. 예를 들어 세 번째 항목(C)을 선택했다면 다음과 같은 결과가 표시됩니다.
You have selected 3
추가 팁
인덱스는 0부터 시작하기 때문에, 사람이 익숙하게 느끼는 1번째 기준으로 표시하고 싶다면 예제 코드처럼 item + 1을 사용하면 됩니다. 또한 선택된 항목의 실제 텍스트 값이 필요하다면 lb.get(item)을 호출하여 해당 인덱스의 문자열을 가져올 수 있습니다. 다중 선택 모드(selectmode=MULTIPLE)에서는 curselection()이 여러 개의 인덱스를 한 번에 반환하므로, 반복문으로 처리하는 것이 안전합니다.