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

Der obige Code erstellt ein tkinter Fenster mit zwei Listboxen. Aber es gibt ein Problem, wenn Sie die Werte von beiden abrufen möchten, denn sobald Sie einen Wert in einem auswählen, wird die Auswahl aufgehoben, die Sie in dem anderen ausgewählt haben.Wie wähle ich gleichzeitig aus zwei Listboxen?

Ist das nur eine Einschränkung, mit der Entwickler leben müssen?

Antwort

23

Kurze Antwort: Legen Sie den Wert des Attributs exportselection aller Listbox-Widgets auf False oder Null fest.

Von a pythonware overview des listbox widget:

Standardmäßig wird die Auswahl zur X-Auswahlmechanismus exportiert. Wenn Sie mehr als eine Listbox auf der Bildschirm haben, vermasselt dies wirklich Dinge für den armen Benutzer. Wenn er etwas in einer Listbox auswählt und dann etwas in einem anderen auswählt, wird die ursprüngliche Auswahl gelöscht. Es ist normalerweise eine gute Idee, diesen Mechanismus in solchen Fällen zu deaktivieren. Im folgende Beispiel werden drei Listenfelder im selben Dialog verwendet:

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) 

Die endgültige Dokumentation für tk Widgets auf der Tcl Sprache basiert, anstatt Python, aber es ist einfach zu Python übersetzen. Das exportselection Attribut kann auf dem standard options manual page gefunden werden.

4

exportselection=0 bei der Definition einer Listbox scheint sich um dieses Problem zu kümmern.