เมื่อมีหลาย 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