gpt4 book ai didi

python - Tkinter 列表框的 "selection_set"和 "activate"暂时禁用扩展选择

转载 作者:太空宇宙 更新时间:2023-11-04 04:45:40 25 4
gpt4 key购买 nike

通过 selectmode 配置,可以使 Tkinter Listbox 允许选择多个项目。但是,如果我现在以编程方式选择并激活一个条目,那么将 shift 键与向上或向下箭头键组合使用不会将选择范围扩展到当前上方/下方的项目,但它只会激活该新项目,同时保留旧的选择。

例如,在下面的 (Python 2.7) 代码中,我继承了 Listbox 以允许 Home 和 End 键分别选择列表中的第一个和最后一个项目:

import Tkinter as tk

class MyListbox(tk.Listbox):
def __init__(self, *args, **kwargs):
tk.Listbox.__init__(self, *args, **kwargs)
self.bind("<Home>", lambda *args: self.select(0))
self.bind("<End>", lambda *args: self.select("end"))

def select(self, index):
self.select_clear(0, "end")
self.selection_set(index)
self.see(index)
self.activate(index)

main = tk.Tk()
listbox = MyListbox(main, selectmode="extended")
for x in ["one", "two", "three", "four", "five"]:
listbox.insert("end", x)
listbox.pack()

tk.mainloop()

这将生成一个带有列表框的窗口。如果您选择列表框并点击“结束”,则选择最后一个元素(字符串“五”)。如果您现在按下 Shift-Up,那么您会期望选择字符串“four”和“five”。相反,“四”在未被选中的情况下被激活(如预期的那样),并且“五”保持选中状态。

为什么除了“五”之外,“四”没有被选中?我可以在不必重新绑定(bind)箭头键和 friend 的情况下解决这个问题吗?

请注意,如果我通过单击或使用箭头键导航到它来选择一个项目,则不会发生此行为。

最佳答案

您还需要通过在 select 方法中调用 self.selection_anchor(index) 来设置 anchor

def select(self, index):
self.select_clear(0, "end")
self.selection_set(index)
self.see(index)
self.activate(index)
self.selection_anchor(index)

关于python - Tkinter 列表框的 "selection_set"和 "activate"暂时禁用扩展选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49695346/

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