【问题标题】:How to get tk <<ListboxSelect>> event from keyboard scroll如何从键盘滚动中获取 tk <<ListboxSelect>> 事件
【发布时间】:2016-02-09 14:33:33
【问题描述】:

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

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

【问题讨论】:

  • 请显示MCVE。如果您告诉我们您在哪个平台上运行,也会有所帮助。
  • 已编辑:用最小的例子。运行 Python 3.x 抱歉含糊不清,但我有 3 个不同版本的 python 3 在 3 个不同的系统 2 Linux 和 1 Mac 上运行,它们都是一样的。
  • 您的代码有语法错误,因此这不可能是给出您描述的行为的实际代码。请显示实际运行的代码,并将selectmode 属性设置为BROWSE(无引号)。

标签: python-3.x tkinter listbox listboxitem


【解决方案1】:

您描述的行为是当selectmode 设置为"browse"(这是默认设置)时的行为。

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

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

-或-

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

【讨论】:

  • 我已经尝试过 BROWSE 和 SINGLE 选择模式,并且行为是相同的。我只想从列表框中选择一个项目。如果我单击列表上的一个项目,我会得到一个事件,然后使用向上向下箭头键,我希望选择随着每次移动而改变。事实并非如此。在使用键移动到条目后,我必须实际使用空格键来选择条目。在所有模式中似乎都是这种情况。
  • @JackGalt:没有看到你的代码,我们不可能知道你做错了什么。
  • 用简短的例子编辑
  • @JackGalt:您正在设置无效的选择模式我已经更新了我的答案。这是一个完美的例子,说明了为什么您应该在问题中包含实际代码。
  • 感谢 Bryan,但我在最初发布之前尝试了两个版本的浏览。它仍然以相同的方式运行。我仍然需要按空格键来执行 curselection()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多