2015-04-07 4 views
1

Я пытаюсь получить свой список, чтобы выделить первый объект (что происходит с self.e1.select_set(0).Я теперь пытаюсь прокрутить список, выделяя следующий элемент при нажатии стрелки вниз, или выбрать следующий пункт вверх, нажав стрелку вверх. Я думал, что я мог бы сделать это с не обязательным, но не повезло. Есть идеи?Список Tkinter, который прокручивается с помощью клавиш со стрелками

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") 

Спасибо!

+0

Что означает "не повезло" означает? Вы получили сообщение об ошибке? Какая ошибка? У вас нет ошибок, но вы получаете неожиданное поведение? –

ответ

1

Как говорит название, yview_scroll только изменяет вид, а не выбор.

Как вы выбираете первый объект с помощью select_set(0), вы также можете использовать select_set для выбора других объектов. Сохраните ссылку на какой объект выбран и используйте его для выбора следующего или предыдущего объекта при нажатии кнопки. Просто убедитесь, что выбор не опускается ниже 0 или превышает размер списка.

Пример кода:

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

Большое спасибо, отлично работал! – Drew

 Смежные вопросы

  • Нет связанных вопросов^_^