如何从<ListboxSelect>键盘滚动获取 tk <>事件



>有谁知道当我使用向上/向下键盘键上下滚动时更改 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()

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

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

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

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

-或-

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

最新更新