使用箭头键滚动的 Tkinter 列表框

Dre*_*rew 5 python listbox tkinter vertical-scrolling

我试图让我的列表框突出显示第一个对象(这发生在 )self.e1.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.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")
Run Code Online (Sandbox Code Playgroud)

谢谢!

fhd*_*sdg 3

顾名思义,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)
Run Code Online (Sandbox Code Playgroud)