ค่าเริ่มต้นของ Listbox: เมื่อเลือกใน Listbox หนึ่ง Selection ในอีกอันจะหายไป ใช้ exportselection=False เพื่อให้ Selection คงอยู่ได้หลาย Listbox พร้อมกัน
ตัวอย่างโค้ด
from tkinter import *
win = Tk()
win.geometry("750x350")
# exportselection=False = รักษา Selection ไว้
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", "CoffeeScript", "Curl"]:
listboxB.insert(END, item)
win.mainloop()
คำอธิบาย exportselection
True(Default): Selection ถูก Export ไปเป็น X Selection (Primary) → Listbox อื่นจะ Clear SelectionFalse: ไม่ Export Selection → หลาย Listbox มี Selection พร้อมกันได้
โหมดการเลือก (Selectmode)
| Mode | พฤติกรรม |
|---|---|
SINGLE | เลือกได้ 1 รายการ |
BROWSE | เลือกได้ 1 รายการ + Drag เพื่อเลื่อน Selection (Default) |
MULTIPLE | คลิกเพื่อ Toggle เลือก/ยกเลิก หลายรายการ |
EXTENDED | Shift+Click = Range, Ctrl+Click = Toggle (Standard) |
การดึงรายการที่เลือก
# ดึง index ที่เลือก (tuple)
selected_indices = listbox.curselection()
# ดึงข้อความที่เลือก
selected_items = [listbox.get(i) for i in listbox.curselection()]
# สำหรับ MULTIPLE/EXTENDED
print(listbox.curselection()) # (0, 2, 4)
การประยุกต์ใช้
File Manager (Copy/Move between folders), Email Client (Move messages between folders), Playlist Manager, Tag Selection UI, Any dual-list selector pattern