2015-04-07 25 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