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

การเก็บ Selection ให้คงอยู่ใน Tkinter Listbox (exportselection=False)

เมื่อมีหลาย Listbox ต้องการให้ Selection คงอยู่ในทุก Listbox พร้อมกัน ใช้ exportselection=False ป้องกันไม่ให้ Selection ถูกล้างเมื่อคลิก Listbox อื่น

ตัวอย่างโค้ด


from tkinter import *

win = Tk()
win.geometry("750x350")

listboxA = Listbox(win, exportselection=False)
listboxA.pack(padx=10, pady=10, fill=BOTH, expand=True)

listboxB = Listbox(win, exportselection=False)
listboxB.pack(padx=10, pady=10, fill=BOTH, expand=True)

for item in ["Python", "Java", "C++", "Rust", "GoLang"]:
    listboxA.insert(END, item)

for item in ["C#", "JavaScript", "R", "Php"]:
    listboxB.insert(END, item)

win.mainloop()

คำอธิบาย exportselection

  • ค่าเริ่มต้น True: Selection ถูก Export เป็น X11 Primary Selection → Widget อื่นที่ได้ Focus จะ Clear Selection เดิม
  • False: ไม่ Export Selection → แต่ละ Listbox เก็บ Selection ของตัวเองได้

Selectmode สำหรับ Multiple Selection


# เลือกหลายรายการได้ (Ctrl+Click, Shift+Click)
listbox = Listbox(win, selectmode=EXTENDED, exportselection=False)

# หรือ Toggle ด้วย Click เดียว
listbox = Listbox(win, selectmode=MULTIPLE, exportselection=False)

การดึง Selection จากหลาย Listbox


def get_all_selections():
    sel_a = [listboxA.get(i) for i in listboxA.curselection()]
    sel_b = [listboxB.get(i) for i in listboxB.curselection()]
    print("Listbox A:", sel_a)
    print("Listbox B:", sel_b)

ttk.Button(win, text="Get Selections", command=get_all_selections).pack()

การประยุกต์ใช้

Dual List Selector (Available/Selected), File Manager (Multi-folder Selection), Email Client (Multi-folder Tagging), Playlist Builder, Tag/Category Assignment UI