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

Tkinter 리스트박스(Listbox)에서 특정 항목을 수정하는 방법

Tkinter는 Python 기반의 GUI 애플리케이션 개발 라이브러리로, 실용적인 데스크톱 애플리케이션을 만드는 데 널리 사용됩니다. 그중 Listbox(리스트박스) 위젯은 여러 항목을 목록 형태로 화면에 표시하는 컨테이너 역할을 하는 대표적인 위젯입니다.

리스트박스 항목 수정의 기본 원리

Listbox 위젯에 항목 목록을 정의하려면 Listbox(root, width, height, **options) 생성자를 사용해야 하며, 표시하고 싶은 항목을 원하는 만큼 자유롭게 삽입할 수 있습니다.

그렇다면 이미 존재하는 특정 항목을 수정하려면 어떻게 해야 할까요? Tkinter의 Listbox는 항목을 직접 편집하는 기능을 제공하지 않기 때문에, 삭제 후 재삽입 방식을 활용해야 합니다. 구체적인 절차는 다음과 같습니다.

  1. 수정할 항목을 목록에서 선택합니다.
  2. delete() 메서드를 호출하여 해당 항목을 삭제합니다.
  3. 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" 버튼을 만들었습니다. 이 방식을 응용하면 리스트박스 내 어떤 항목이든 원하는 값으로 교체하거나 수정할 수 있습니다.

실행 결과

코드를 실행하면 다음과 같은 출력 창이 나타납니다.

Tkinter 리스트박스(Listbox)에서 특정 항목을 수정하는 방법

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

Tkinter 리스트박스(Listbox)에서 특정 항목을 수정하는 방법

추가 팁: 새 값 입력받기

실제 애플리케이션에서는 고정된 값("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)에 삭제 전의 인덱스를 그대로 사용하면, 항목이 목록 끝이 아닌 원래 위치에 그대로 유지된 채 수정됩니다. 상황에 맞게 활용해 보시기 바랍니다.