Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

วิธีล้างข้อมูลใน Tkinter Listbox

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 ได้