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

Tkinter 리스트박스에서 선택한 여러 항목을 한 번에 삭제하는 방법

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] 슬라이싱으로 인덱스를 역순으로 순회하며 삭제합니다.

실행 결과

위 코드를 실행하면 다음과 같은 윈도우가 나타납니다.

Tkinter 리스트박스에서 선택한 여러 항목을 한 번에 삭제하는 방법

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

Tkinter 리스트박스에서 선택한 여러 항목을 한 번에 삭제하는 방법

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