코딩/파이썬 활용 프로젝트

파이썬 GUI_7_리스트 박스 항목 삭제

jkyoon 2022. 12. 7. 17:06

*본 코드는 PC(윈도)에서도 동작합니다.

[목표] 리스트 박스에 아이템(항목) 관리 삭제하기

이 전 게시물에서 다음과 같이 리스트 박스에 항목을 추가해 보았습니다.

[복습] 레이블에 입력한 항목을 리스트 박스에 추가하기

다음 코드를 통해 레이블에 입력한 문자열을 리스트 박스에 추가할 수 있습니다. 

 

 

from tkinter import *

root = Tk()
root.title("GUI프로그래밍")
root.geometry("320x200")

lbox = Listbox(root, selectmode="extended", height=0)
lbox.insert(0,"라이언")
lbox.insert(1,"프로도")
lbox.insert(2,"무지")
lbox.insert(END,"네오")
lbox.pack()

ent = Entry(root, width=20)
ent.pack()

def btnist():
    lbox.insert(END,ent.get())

btn1 = Button(root, text="추가", command=btnist)
btn1.pack()

root.mainloop()


이번에는 리스트 박스 항목을 삭제해 보겠습니다.

 

 

 

1. 리스트 박스에 삭제 버튼 만들기(맨 아래 항목 삭제하기)

위 코드에 음영 표시한 코드 네 줄을 추가하면 삭제 버튼이 표시되고 동작합니다.

from tkinter import *

---중간 코드 생략---

def btnist():
    lbox.insert(END,ent.get())

def btndlt():
   lbox.delete(END) #END자리에 0을 넣으면 맨 위 항목 삭제함

btn1 = Button(root, text="추가", command=btnist)
btn1.pack()

btn2 = Button(root, text="삭제", command=btndlt)
btn2.pack()

root.mainloop()

[코드 설명]

추가 코드 3~4행: 리스트 박스 항목을 삭제하기 위한 '삭제' 버튼을 표시합니다.

추가 코드 1~2행: 삭제 버튼 클릭시 동작할 함수 btndlt()의 기능을 정의합니다.

delete(END)는 리스트 박스의 항목 중 END(맨 아랫쪽) 위치에 있는 항목을 삭제합니다.

삭제 버튼을 클릭해 보세요. 네오, 무지, 프로도...순으로 항목이 삭제됩니다.

 

[해보기]

END 대신에 0을 넣고 실행해 보세요.

 

2. 삭제 버튼 클릭 시 선택한 항목 삭제하기

이런 상황을 가정해 봅시다.

"삭제하고 싶은 항목이 맨 위 또는 아래가 아니라 한 중간에 있다면?"

 

이에 대한 해결책도 물론 있습니다.

원하는 항목을 클릭한 뒤 삭제해 보겠습니다.

아래 처럼 위 코드에서 한 줄만 수정해 보세요. ( * 취소선 표시된 코드를 삭제하고 음영 표시한 코드로 대체하세요.)

from tkinter import *

---중간 코드 생략---

def btnist():
    lbox.insert(END,ent.get())

def btndlt():
   lbox.delete(END) 
    lbox.delete(lbox.curselection())
   
btn1 = Button(root, text="추가", command=btnist)
btn1.pack()

btn2 = Button(root, text="삭제", command=btndlt)
btn2.pack()

root.mainloop()

수정한 코드 중

curselection()메서드는 선택(클릭)한 항목의 인덱스(위치)값을 가져옮니다.

예를 들어,

오른쪽 그림처럼 "프로도"를 선택하면  curselection()는 "프로도"가 자리한 인덱스(위치)값 1을 가져옵니다.

따라서 lbox.delete(1)의 결과로 "프로도"가 삭제됩니다.

 

[해보기]

프로그램 실행 후 아래와 같이 실습해 보세요.

-2개 이상 항목을 선택하고 삭제 버튼을 클릭해 보세요.