2009-04-16 25 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() 

El código anterior crea una ventana tkinter con dos listboxes. Pero hay un problema si desea recuperar los valores de ambos porque, tan pronto como selecciona un valor en uno, anula la selección de lo que haya seleccionado en el otro.¿Cómo seleccionar al mismo tiempo desde dos Listbox?

¿Es esta una limitación que los desarrolladores tienen que vivir?

Respuesta

23

Respuesta corta: establezca el valor del atributo exportselection de todos los widgets de listbox en False o cero.

De a pythonware overview del widget cuadro de lista:

Por defecto, la selección se exporta a el mecanismo de selección X. Si tiene tiene más de un cuadro de lista en la pantalla , esto realmente ensucia las cosas para el usuario pobre. Si selecciona algo en un cuadro de lista, y luego selecciona algo en otro, se borra la selección original . Es generalmente una buena idea desactivar este mecanismo en tales casos. En el siguiente ejemplo , tres cuadros de lista se utilizan en el mismo cuadro de diálogo:

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 documentación definitiva para los widgets tk se basa en el lenguaje Tcl en lugar de pitón, pero es fácil de traducir al pitón. El atributo exportselection se puede encontrar en el standard options manual page.

4

exportselection=0 al definir un cuadro de lista parece que se ocupa de este problema.

Cuestiones relacionadas