2010-08-24 14 views
1

J'écris une interface graphique Tkinter en Python. Il a une entrée pour la recherche avec un ListBox de résultats ci-dessous. Le ListBox a également une barre de défilement. Comment puis-je faire défiler avec la souris et les touches fléchées pour travailler dans le ListBox sans changer le focus du champ de recherche? IE Je veux que l'utilisateur puisse taper une recherche, faire défiler et continuer à taper sans avoir à passer d'un widget à l'autre. MerciComment faire pour faire défiler un Tkinter ListBox inactif?

+0

Je pense que je pourrais simplement lier les boutons de la souris et les touches fléchées pour faire le défilement manuellement ... http: // www .daniweb.com/code/snippet217059.html explique les événements de défilement de la souris, et les touches fléchées sont faciles. Alors maintenant j'ai juste besoin de savoir à quoi les lier. – Jeff

Répondre

4

Ajoutez des liaisons au widget d'entrée qui appellent les commandes yview et see de la liste de sélection lorsque l'utilisateur appuie de haut en bas ou utilise la molette de défilement haut/bas.

Par exemple, vous pouvez faire quelque chose comme ça pour les touches fléchées:

class App(Tkinter.Tk): 
    def __init__(self): 
     Tkinter.Tk.__init__(self) 
     self.entry = Tkinter.Entry() 
     self.listbox = Tkinter.Listbox() 
     self.entry.pack(side="top", fill="x") 
     self.listbox.pack(side="top", fill="both", expand=True) 
     for i in range(100): 
      self.listbox.insert("end", "item %s" % i) 

     self.entry.bind("<Down>", self.OnEntryDown) 
     self.entry.bind("<Up>", self.OnEntryUp) 

    def OnEntryDown(self, event): 
     self.listbox.yview_scroll(1,"units") 

    def OnEntryUp(self, event): 
     self.listbox.yview_scroll(-1,"units") 
+0

Cela a du sens. Mais comment puis-je les contrôler explicitement? Jusqu'à présent, je viens d'utiliser mylistbox.config (yscrollcommand = myscrollbar.set) et myscrollbar.config (commande = mylistbox.yview). – Jeff

+0

@Jeff: J'ai ajouté un exemple de code à ma réponse pour répondre à votre question. –

+0

merci! Divers sites Web l'ont rendu complexe, mais avec votre exemple, c'est super facile. – Jeff

Questions connexes