Widget Listbox ใน Tkinter ใช้สำหรับสร้างรายการข้อมูลที่สามารถเลื่อนดูได้ (Scrollable) โดยแต่ละรายการเรียกว่า List Item ผู้ใช้สามารถเลือกได้ทั้งรายการเดียวหรือหลายรายการ ขึ้นอยู่กับการตั้งค่า
วิธีล้างข้อมูลใน Listbox
ใช้เมธอด delete(0, tk.END) เพื่อล้างรายการทั้งหมดใน Listbox นอกจากนี้ยังสามารถลบรายการเดี่ยวได้โดยใช้ curselection() เพื่อดูดัชนีที่เลือก แล้วค่อยลบด้วย delete()
ตัวอย่างโค้ด: ล้างรายการทั้งหมด
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.title("Listbox Clear Demo")
root.geometry("500x350")
# สร้าง Listbox
listbox = tk.Listbox(root, width=50, height=10, font=("Segoe UI", 12))
listbox.pack(pady=20, padx=20, fill="both", expand=True)
# เพิ่มข้อมูลตัวอย่าง
items = ["รายการที่ 1", "รายการที่ 2", "รายการที่ 3", "รายการที่ 4", "รายการที่ 5"]
for item in items:
listbox.insert(tk.END, item)
# ฟังก์ชันล้างรายการทั้งหมด
def clear_all():
listbox.delete(0, tk.END)
status_label.config(text="ล้างรายการทั้งหมดแล้ว")
# ฟังก์ชันลบเฉพาะรายการที่เลือก
def delete_selected():
selection = listbox.curselection()
if selection:
# ลบจากท้ายไปหน้า เพื่อไม่ให้ดัชนีเปลี่ยน
for index in reversed(selection):
listbox.delete(index)
status_label.config(text=f"ลบรายการที่เลือกแล้ว ({len(selection)} รายการ)")
else:
status_label.config(text="กรุณาเลือกรายการที่ต้องการลบ")
# ปุ่มควบคุม
btn_frame = ttk.Frame(root)
btn_frame.pack(pady=10)
ttk.Button(btn_frame, text="ล้างทั้งหมด", command=clear_all).pack(side="left", padx=5)
ttk.Button(btn_frame, text="ลบที่เลือก", command=delete_selected).pack(side="left", padx=5)
# แสดงสถานะ
status_label = ttk.Label(root, text="พร้อมใช้งาน", font=("Segoe UI", 10))
status_label.pack(pady=5)
root.mainloop()
ผลลัพธ์
โปรแกรมจะแสดง Listbox พร้อมข้อมูลตัวอย่าง 5 รายการ มีปุ่ม 2 ปุ่ม: "ล้างทั้งหมด" และ "ลบที่เลือก" พร้อมแสดงสถานะการดำเนินการ
คำแนะนำเพิ่มเติม
- ใช้
tk.ENDแทนค่าตัวเลขเพื่อความชัดเจนและปลอดภัย - เมื่อลบหลายรายการพร้อมกัน ให้วนลูปจากท้ายไปหน้า (
reversed()) เพื่อป้องกันปัญหาดัชนีเปลี่ยนไป - ตรวจสอบ
curselection()ว่ามีค่าหรือไม่ก่อนลบ เพื่อป้องกัน Error - สามารถผูก Event
<Delete>ให้กับ Listbox เพื่อลบด้วยปุ่ม Delete ได้