2009-04-16 19 views
14
from Tkinter import * 


master = Tk() 

listbox = Listbox(master) 
listbox.pack() 
listbox.insert(END, "a list entry") 

for item in ["one", "two", "three", "four"]: 
    listbox.insert(END, item) 

listbox2 = Listbox(master) 
listbox2.pack() 
listbox2.insert(END, "a list entry") 

for item in ["one", "two", "three", "four"]: 
    listbox2.insert(END, item) 

master.mainloop() 

Il codice sopra crea una finestra tkinter con due listbox. Ma c'è un problema se vuoi recuperare i valori da entrambi perché, non appena selezioni un valore in uno, deseleziona tutto ciò che hai selezionato nell'altro.Come selezionare contemporaneamente da due Listbox?

È solo una limitazione con cui gli sviluppatori devono convivere?

risposta

23

Risposta breve: impostare il valore dell'attributo exportselection di tutti i widget casella di elenco su False o zero.

Da a pythonware overview del widget listbox:

Per impostazione predefinita, la selezione viene esportato al meccanismo di selezione X. Se hai più di una casella di riepilogo sulla schermata , questo mette davvero in difficoltà lo per l'utente povero. Se seleziona qualcosa in una listbox e quindi seleziona qualcosa in un'altra, la selezione originale di viene cancellata. È in genere una buona idea disabilitare questo meccanismo in questi casi. Nel seguente esempio, tre listboxes sono utilizzati nella stessa finestra di dialogo:

b1 = Listbox(exportselection=0) 
for item in families: 
    b1.insert(END, item) 

b2 = Listbox(exportselection=0) 
for item in fonts: 
    b2.insert(END, item) 

b3 = Listbox(exportselection=0) 
for item in styles: 
    b3.insert(END, item) 

La documentazione definitiva per i widget TK è basato sul linguaggio Tcl, piuttosto che di pitone, ma è facile da tradurre in pitone. L'attributo exportselection può essere trovato su standard options manual page.

4

exportselection=0 quando la definizione di una casella di riepilogo sembra risolvere questo problema.

Problemi correlati