gpt4 book ai didi

python - Tkinter Listbox 以蓝色突出显示一个元素,但在另一个元素周围放置黑色边框?

转载 作者:行者123 更新时间:2023-11-28 21:51:41 29 4
gpt4 key购买 nike

我正在编写一个带有 Tkinter GUI 的应用程序,其中包含我希望可以通过键盘访问的长列表框。

使用箭头键一次滚动一个项目是乏味的,所以我想让用户更快地在列表中移动,方法是输入元素的名称,同时向上翻页page downhomeend 工作。

问题是,当我使用 Listboxselect_set() 方法时,它所做的事情似乎与单击某个项目或移动使用箭头键。

当我按箭头键或单击以选择一个项目时,它会以蓝色突出显示该项目并在其周围放置黑色边框。

当我只使用 select_set() 方法时,它只会将蓝色突出显示移动到所需的项目。黑色边框保留在项目周围。

这会导致问题,因为如果我随后通过按向上/向下箭头键移动我的选择,它将选择具有黑色边框的项目上方/下方的项目,而不是以蓝色突出显示的项目.

我的问题是,除了蓝色突出显示之外,如何将黑色边框移动到正确的项目?

这是一张显示蓝色突出显示和黑色边框不同步的屏幕截图:

Image showing the problem

这是重现问题的一些最小代码。我删除了 endpage uppage down 的实现,但您仍然可以通过选择第一个元素以外的任何元素来查看问题使用鼠标,然后按 home

from Tkinter import END, Listbox, Tk

top = Tk()

listbox = Listbox(top)
listbox.grid(row = 0, column = 0)
for item in ['First', 'Second', 'Third', 'Last']:
listbox.insert(END, item)

def onKey(e):
if e.keysym == 'Home':
listbox.select_clear(0, END)
listbox.select_set(0)

listbox.bind('<Key>', onKey)

top.mainloop()

最佳答案

问题是因为函数 Listbox.select_set(index) 只是选择了你给的索引的项目,蓝色高亮显示了你选择的项目。你需要使用函数Listbox.activate(index)来激活你给的index的item,然后黑框显示你激活的item。

我试过你的代码,我在函数 listbox.select_set(0) 下方添加了一行 listbox.activate(0)。添加这行代码后,当用户按下 home 时,蓝色高亮和黑色边框将一起移动到第一项。

关于python - Tkinter Listbox 以蓝色突出显示一个元素,但在另一个元素周围放置黑色边框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29725298/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com