Comment sélectionner en même temps de deux Listbox?
Question
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()
Le code ci-dessus crée une fenêtre tkinter
avec deux listboxes. Mais il y a un problème si vous voulez récupérer les valeurs à la fois parce que, dès que vous sélectionnez une valeur dans l'une, il désélectionne tout ce que vous avez sélectionné dans l'autre.
Est-ce juste une limitation développeurs doivent vivre avec?
La solution
Réponse courte: définissez la valeur de l'attribut exportselection
de tous les widgets listbox sur False ou zéro
De une Vue d'ensemble pythonware du widget listbox:
Par défaut, la sélection est exportée le mécanisme de sélection de X. Si vous ont plus d'un sur la zone de liste écran, ce salit vraiment les choses pour l'utilisateur pauvres. S'il choisit quelque chose dans une zone de liste, puis sélectionne quelque chose dans un autre, la sélection originale est effacée. Il est généralement une bonne idée de désactiver cette mécanisme dans de tels cas. dans le exemple suivant, trois listes déroulantes sont utilisé dans la même boîte de dialogue:
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 documentation définitive pour les widgets tk est basé sur le langage Tcl plutôt que de python, mais il est facile de traduire en python. L'attribut exportselection
se trouve sur le page de manuel .
Autres conseils
exportselection=0
lors de la définition d'une zone de liste semble prendre en charge cette question.