我在Tkinter中有一个列表框,我想在用户按下一个按键时以编程方式更改所选项目。我有keyPressed方法,但如何在按下键的方法中更改列表框中的选择?
答案 0 :(得分:6)
因为列表框允许单个与连续与不同的选择,并且还允许活动元素,所以这个问题是不明确的。 The docs解释了你可以做的所有不同的事情。
selection_set
方法将项添加到当前选择中。根据您的选择模式,这可能会也可能不会取消选择其他项目。
如果您想保证始终只选择一个项目,可以使用selection_clear(0, END)
清除选择,然后selection_set
清除一个项目。
如果您还要激活所选项目,请在设置项目后调用activate
。
要了解不同的选择模式,以及活跃和选择的互动方式,请阅读文档。
答案 1 :(得分:0)
如果您还需要触发ListboxSelect事件,请使用以下代码:
# create
self.lst = tk.Listbox(container)
# place
self.lst.pack()
# set event handler
self.lst_emails.bind('<<ListboxSelect>>', self.on_lst_select)
# select first item
self.lst.selection_set(0)
# trigger event manually
self.on_lst_select()
# event handler
def on_lst_select(self, e = None):
# Note here that Tkinter passes an event object to handler
if len(self.lst.curselection()) == 0:
return
index = int(self.lst.curselection()[0])
value = self.lst.get(index)
print (f'new item selected: {(index, value)}')