Tkinter中点击Listbox后切换焦点到Entry失效的解决求助
解决Tkinter Listbox点击后焦点无法切换到Entry的问题
问题出在<<ListboxSelect>>事件的触发时机上——当你直接在事件处理函数里调用focus_set()时,Listbox的点击操作还没完成内部处理,它会在你的代码执行后重新夺回焦点。
解决方法很直接:用after()方法延迟一小段时间再设置焦点,给Tkinter足够时间完成Listbox的内部事件流程:
import tkinter as tk root = tk.Tk() lb = tk.Listbox(root) lb.pack() # 添加测试选项 for item in ["选项1", "选项2", "选项3"]: lb.insert(tk.END, item) entry = tk.Entry(root) entry.pack() def sel_done(event): # 延迟10毫秒设置焦点,避开Listbox的焦点抢占 entry.after(10, entry.focus_set) lb.bind('<<ListboxSelect>>', sel_done) root.mainloop()
另外注意:原代码里的sel_done函数没有接收事件参数,Tkinter绑定事件时会自动传递事件对象,必须给函数加上event参数,否则会触发参数不匹配的报错。
内容的提问来源于stack exchange,提问作者angico
相关产品推荐
相关产品推荐

