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

Tkinter Listbox에서 선택한 항목의 인덱스 가져오는 방법

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()이 여러 개의 인덱스를 한 번에 반환하므로, 반복문으로 처리하는 것이 안전합니다.