애플리케이션에서 여러 항목을 목록 형태로 표시해야 할 때, Tkinter는 Listbox 위젯을 제공합니다. Listbox는 항목들을 세로 방향으로 나열하여 보여주는 위젯으로, 다양한 GUI 프로그램에서 선택 목록을 구성할 때 널리 사용됩니다.
Listbox 항목의 텍스트를 변경하는 원리
Tkinter의 Listbox는 특정 항목의 텍스트를 직접 수정하는 기능을 제공하지 않습니다. 따라서 항목의 텍스트를 변경하려면 다음과 같은 절차를 거쳐야 합니다.
- listbox.curselection() 메서드로 현재 선택된 항목의 인덱스를 가져옵니다.
- 선택된 항목을 listbox.delete(index) 메서드로 삭제합니다.
- 새로운 텍스트를 listbox.insert(위치, 항목) 메서드로 삽입합니다.
예제 코드
# 필요한 라이브러리 임포트
from tkinter import *
from tkinter import ttk
# tkinter 프레임(윈도우) 인스턴스 생성
win = Tk()
# 윈도우 크기 설정
win.geometry("700x350")
# Listbox 위젯 생성
lb = Listbox(win)
lb.pack(expand=True, fill=BOTH)
# Listbox 항목을 편집하는 함수 정의
def edit():
for item in lb.curselection():
lb.delete(item)
lb.insert("end", "foo")
# Listbox에 항목 추가
lb.insert("end", "item1", "item2", "item3", "item4", "item5")
# 항목을 편집·삭제하는 버튼 추가
ttk.Button(win, text="Edit", command=edit).pack()
win.mainloop()실행 결과
위 코드를 실행하면 항목 목록이 포함된 윈도우가 화면에 나타납니다.

이제 목록에서 항목을 하나 선택한 뒤 "Edit" 버튼을 클릭하면, 선택된 항목이 삭제되고 그 자리에 새로운 텍스트("foo")가 삽입되어 목록이 갱신됩니다.

추가 팁
- 여러 항목을 동시에 선택할 수 있도록 하려면
selectmode=MULTIPLE또는selectmode=EXTENDED옵션을 사용하세요. - 특정 위치에 항목을 삽입하고 싶다면
insert("end", ...)대신 원하는 인덱스 번호를 지정할 수 있습니다. - 선택된 항목이 없는 상태에서 버튼을 클릭하면 아무 일도 일어나지 않으므로, 실제 애플리케이션에서는
curselection()의 반환값이 비어 있는지 확인하는 예외 처리를 추가하는 것이 좋습니다.