Tkinter Listbox编程选中项后上下方向键失效问题求助
问题解决:Tkinter Listbox编程选中后方向键失效修复
问题根源是编程设置选中项后,Listbox没有获得键盘焦点,导致方向键事件无法被Listbox捕获。只需在SetSelection函数中添加焦点设置即可解决。
修改后的代码
import tkinter as tk root = tk.Tk() root.geometry("300x300") SelectedIndex = 0 def UserClickedSelection(event): # 获取用户选中项 global SelectedIndex SelectedIndex = mylistbox.curselection()[0] def SetSelection(index): # 编程设置选中项 global SelectedIndex mylistbox.selection_clear(0,tk.END) mylistbox.selection_set(index) mylistbox.activate(index) # 新增:让Listbox获取键盘焦点 mylistbox.focus_set() SelectedIndex = mylistbox.curselection()[0] mylistbox = tk.Listbox(root,activestyle="none") mylistbox.place(x=0,y=0) mylistbox.config(selectmode=tk.BROWSE) mylistbox.config(exportselection=False) mylistbox.bind('<<ListboxSelect>>',UserClickedSelection) mylist = ['Zero','One','Two','Three','Four','Five'] mylistbox.insert(0,*mylist) # 调用函数设置选中索引2 SetSelection(2) root.mainloop()
关键说明
- 当通过代码设置选中项时,Listbox默认不会自动获取焦点,而方向键属于键盘输入事件,只有拥有焦点的控件才能响应这类事件。
- 添加
mylistbox.focus_set()后,Listbox获得键盘焦点,上下方向键就能正常触发选中项切换,同时也会正常触发<<ListboxSelect>>事件更新SelectedIndex。
内容的提问来源于stack exchange,提问作者fmex
相关产品推荐
相关产品推荐

