Tkinter는 Python 기반의 GUI 애플리케이션 개발 라이브러리로, 실용적인 데스크톱 애플리케이션을 만드는 데 널리 사용됩니다. 그중 Listbox(리스트박스) 위젯은 여러 항목을 목록 형태로 화면에 표시하는 컨테이너 역할을 하는 대표적인 위젯입니다.
리스트박스 항목 수정의 기본 원리
Listbox 위젯에 항목 목록을 정의하려면 Listbox(root, width, height, **options) 생성자를 사용해야 하며, 표시하고 싶은 항목을 원하는 만큼 자유롭게 삽입할 수 있습니다.
그렇다면 이미 존재하는 특정 항목을 수정하려면 어떻게 해야 할까요? Tkinter의 Listbox는 항목을 직접 편집하는 기능을 제공하지 않기 때문에, 삭제 후 재삽입 방식을 활용해야 합니다. 구체적인 절차는 다음과 같습니다.
- 수정할 항목을 목록에서 선택합니다.
- delete() 메서드를 호출하여 해당 항목을 삭제합니다.
- insert() 메서드로 새로운 값을 같은 위치에 추가합니다.
이제 예제를 통해 실제 동작 방식을 살펴보겠습니다.
예제 코드
# 필요한 라이브러리 임포트
from tkinter import *
from tkinter import ttk
# tkinter 프레임(윈도우) 인스턴스 생성
win = Tk()
# 윈도우 크기 설정
win.geometry("700x350")
# Listbox 위젯 생성
lb = Listbox(win, width=100, height=10, background="purple3", foreground="white", font=('Times 13'), selectbackground="white")
lb.pack()
# 선택된 항목을 먼저 삭제한 뒤,
# 삭제가 완료되면 새로운 항목을 삽입
def edit_current():
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_current).pack()
win.mainloop()이 예제에서는 Listbox 위젯으로 항목 목록을 구성한 뒤, 선택된 항목의 기존 값을 변경하는 "Edit" 버튼을 만들었습니다. 이 방식을 응용하면 리스트박스 내 어떤 항목이든 원하는 값으로 교체하거나 수정할 수 있습니다.
실행 결과
코드를 실행하면 다음과 같은 출력 창이 나타납니다.

이제 목록에서 항목을 하나 선택한 후 "Edit" 버튼을 클릭해 보세요. 예를 들어 "item5"를 선택하고 "Edit" 버튼을 누르면 해당 항목이 "foo"로 교체됩니다.

추가 팁: 새 값 입력받기
실제 애플리케이션에서는 고정된 값("foo") 대신 사용자가 직접 입력한 값으로 항목을 수정하는 경우가 많습니다. 이때는 simpledialog.askstring()을 활용하면 편리합니다.
from tkinter import simpledialog
def edit_current():
for item in lb.curselection():
new_value = simpledialog.askstring("항목 수정", "새 값을 입력하세요:")
if new_value:
lb.delete(item)
lb.insert(item, new_value)이처럼 insert(item, new_value)에 삭제 전의 인덱스를 그대로 사용하면, 항목이 목록 끝이 아닌 원래 위치에 그대로 유지된 채 수정됩니다. 상황에 맞게 활용해 보시기 바랍니다.