2015-04-07 1 views
1

J'essaie d'obtenir ma liste de sélection pour mettre le premier objet en surbrillance (ce qui se passe avec self.e1.select_set(0)) J'essaie maintenant de faire défiler la liste en mettant en surbrillance l'élément suivant en appuyant sur la flèche bas, ou sélectionnez l'élément immédiatement en appuyant sur la flèche haut. Je pensais que je pouvais le faire avec la liaison, mais pas de chance. Toutes les idées?Tkinter listbox qui défile avec les touches fléchées

def body(self, master):   
    self.e1 = tk.Listbox(master, selectmode=tk.SINGLE, height = 3, exportselection=0) 
    self.e1.insert(tk.END, "1") 
    self.e1.insert(tk.END, "2") 

    self.e1.grid(row=0, column=1) 
    self.e1.select_set(0) 

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

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

def OnEntryUp(self, event): 
    self.e1.yview_scroll(-1, "units") 

Merci!

+0

Que signifie "pas de chance"? Avez-vous une erreur? Quelle erreur? N'avez-vous pas d'erreur, mais vous avez un comportement inattendu? –

Répondre

1

Comme le nom l'indique, yview_scroll ne change que vue, pas la sélection

Tout comme vous sélectionnez le premier objet avec select_set(0), vous pouvez également utiliser select_set pour sélectionner les autres objets. Conservez une référence à l'objet sélectionné et utilisez-le pour sélectionner l'objet suivant ou précédent en appuyant sur un bouton. Assurez-vous simplement que la sélection ne descend pas au-dessous de 0 ou de la taille de la liste.

Exemple de code:

def body(self, master):   
    self.e1 = tk.Listbox(master, selectmode=tk.SINGLE, height = 3, exportselection=0) 
    self.e1.insert(tk.END, "1") 
    self.e1.insert(tk.END, "2") 

    self.e1.grid(row=0, column=1) 
    self.selection = 0 
    self.e1.select_set(self.selection) 

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

def OnEntryDown(self, event): 
    if self.selection < self.e1.size()-1: 
     self.e1.select_clear(self.selection) 
     self.selection += 1 
     self.e1.select_set(self.selection) 

def OnEntryUp(self, event): 
    if self.selection > 0: 
     self.e1.select_clear(self.selection) 
     self.selection -= 1 
     self.e1.select_set(self.selection) 
+0

Merci beaucoup, très bien travaillé! – Drew