Tkinter에서 Listbox 위젯으로 목록 상자를 만든 후, 사용자가 선택한 여러 개의 항목을 한 번에 삭제하고 싶은 경우가 종종 있습니다. 이 글에서는 그 방법을 단계별로 살펴보겠습니다.
여러 항목 선택을 위한 기본 설정
리스트박스에서 여러 항목을 동시에 선택하려면 selectmode 옵션을 MULTIPLE로 지정해야 합니다. 기본값인 SINGLE 모드에서는 하나의 항목만 선택할 수 있기 때문입니다.
그다음, 삭제 버튼을 클릭했을 때 현재 선택된 항목들의 인덱스를 가져와 반복문으로 순회하면서 delete() 메서드를 호출하면 됩니다.
전체 예제 코드
#필요한 라이브러리 임포트
from tkinter import *
#tkinter 프레임(윈도우) 인스턴스 생성
win = Tk()
#윈도우 크기 설정
win.geometry("700x400")
#안내용 텍스트 레이블 생성
label = Label(win, text="목록에서 항목을 선택하세요", font=('Poppins bold', 18))
label.pack(pady=20)
#선택된 항목을 삭제하는 함수 정의
def delete_item():
selected_item = my_list.curselection()
for item in selected_item[::-1]:
my_list.delete(item)
#MULTIPLE 모드로 리스트박스 생성
my_list = Listbox(win, selectmode=MULTIPLE)
my_list.pack()
items = ['C++', 'java', 'Python', 'Rust', 'Ruby', 'Machine Learning']
#리스트의 항목들을 리스트박스에 추가
for item in items:
my_list.insert(END, item)
#선택한 항목을 삭제하는 버튼 생성
Button(win, text="삭제", command=delete_item).pack()
#윈도우 실행 유지
win.mainloop()코드 설명
핵심은 delete_item() 함수입니다. curselection() 메서드는 현재 선택된 항목들의 인덱스를 튜플 형태로 반환합니다.
여기서 주의할 점은 삭제 시 인덱스가 뒤에서부터 처리되어야 한다는 것입니다. 앞쪽 인덱스부터 삭제하면 뒤에 있는 항목들의 인덱스가 당겨져 잘못된 항목이 삭제될 수 있습니다. 따라서 [::-1] 슬라이싱으로 인덱스를 역순으로 순회하며 삭제합니다.
실행 결과
위 코드를 실행하면 다음과 같은 윈도우가 나타납니다.

이제 리스트박스에서 원하는 항목들을 여러 개 선택한 뒤 "삭제" 버튼을 클릭하면 해당 항목들이 목록에서 제거됩니다.

위 실행 결과를 보면 세 개의 항목이 "삭제" 버튼 클릭 한 번으로 목록에서 성공적으로 제거된 것을 확인할 수 있습니다.