如何获得tk&lt; <listboxselect>&gt;键盘滚动的事件

时间:2016-02-09 14:33:33

标签: python-3.x tkinter listbox listboxitem

有没有人知道让tk.listbox选择更改的方法我用向上/向下键盘键向上和向下滚动?

目前我从鼠标点击中获得了一个事件。

但如果我使用向上/向下键滚动到​​列表条目,我就不会收到任何事件,直到我点击空格键。

我想要的是curselection()在滚动时自动更改而不必使用空格键。我希望通过按下每个向上或向下键来改变列表框选择来消除空格键的需要。

from tkinter import *
from tkinter import messagebox

def onlbclick(evt):
    w=evt.widget
    index = int(w.curselection()[0])
    value=w.get(index)
    messagebox.showinfo("Listbox Select",'You selected listitem %d: "%s"',  % (index, value))



root =  Tk()
root.geometry("200x200")
root.title("List Box Test")
fr = Frame(root, width=200, height=200,bg="grey")
fr.pack()

lb=Listbox(fr,selectmode="SINGLE",bg="white")
lb.insert(1,"blah")
lb.insert(2,"blah blah")
lb.insert(3, "blah blah blah")
lb.insert(4, "blah blah blah blah")
lb.grid(row=1, rowspan=10, column=0,columnspan=5, sticky='W', /
padx=5, pady=5,ipadx=5, ipady=5)
lb.bind('<<ListboxSelect>>', onlbclick)

root.mainloop()

这是一个简短的示例版本,用于演示此问题。 运行代码。单击列表框中的任何项目,您将获得一个消息框,其中包含您单击的列表项的文本。现在不使用鼠标,使用键盘上的向上或向下箭头键并滚动列表。要触发选择更改事件,您必须按空格键。

1 个答案:

答案 0 :(得分:0)

您描述的行为是selectmode设置为"browse"时获得的行为,这是默认设置。

在您编辑的示例中,您将selectmode设置为"SINGLE"这是无效模式。它需要是Tkinter常量BROWSE(无引号)或文字字符串"browse"

lb=Listbox(fr, selectmode=BROWSE, bg="white")

-OR -

lb=Listbox(fr,selectmode="browse",bg="white")