Tkinter에서 스크롤 가능한 목록 위젯을 만들고 싶다면 Listbox 위젯을 사용하면 됩니다. Listbox 위젯을 활용하면 여러 개의 항목(List Item)으로 구성된 목록을 손쉽게 생성할 수 있으며, 설정에 따라 사용자가 목록에서 하나 또는 여러 개의 항목을 선택할 수도 있습니다.
그렇다면 Listbox에 들어 있는 항목들을 어떻게 지울 수 있을까요? 모든 항목을 한 번에 삭제하려면 delete(0, END) 메서드를 사용하면 됩니다. 또한 전체가 아닌 특정 항목 하나만 삭제하고 싶다면, curselection() 메서드로 현재 선택된 항목을 가져온 뒤 delete() 함수를 호출하여 해당 항목만 제거할 수 있습니다.
예제 코드
# 필요한 라이브러리 임포트
from tkinter import *
from tkinter import ttk
# tkinter 프레임(윈도우) 인스턴스 생성
win = Tk()
# 윈도우 크기 설정
win.geometry("700x250")
# Listbox 위젯 생성
lb = Listbox(win, width=100, height=5, font=('TkMenuFont', 20))
lb.pack()
# 항목이 삭제된 후 새로운 안내 문구를 표시하는 함수
def delete():
lb.delete(0, END)
Label(win, text="Nothing Found Here!",
font=('TkheadingFont', 20)).pack()
# Listbox에 항목 추가
lb.insert("end", "item1", "item2", "item3", "item4", "item5")
# 항목을 삭제하는 버튼 추가
ttk.Button(win, text="Delete", command=delete).pack()
win.mainloop()실행 결과
위 코드를 실행하면 Listbox에 여러 개의 항목이 표시되고, 그 아래에 목록을 비울 수 있는 버튼이 함께 나타납니다.
이제 "Delete" 버튼을 클릭해 보세요. Listbox의 모든 항목이 사라지고 "Nothing Found Here!"라는 메시지가 화면에 출력되는 것을 확인할 수 있습니다.
추가 팁: 특정 항목만 삭제하기
전체가 아닌 사용자가 선택한 항목만 삭제하려면 다음과 같이 curselection() 메서드를 활용할 수 있습니다.
def delete_selected():
selected = lb.curselection()
for index in reversed(selected):
lb.delete(index)이처럼 Tkinter의 Listbox 위젯은 간단한 메서드 호출만으로 목록 전체 또는 개별 항목을 유연하게 관리할 수 있어, 다양한 GUI 프로그램에서 유용하게 활용됩니다.