TKinter 小部件中的焦点切换无法以编程方式工作

问题描述 投票:0回答:1

我有 TKinter 应用程序,其中一个窗口只有两个小部件:一个

Listbox
和一个 Entry。现在,我希望每当用户单击
Listbox
中的某个项目时,焦点立即切换到 Entry。但
Entry.focus_set()
Entry.focus_force()
都不起作用。有办法让它发挥作用吗?

lb = Listbox(root)
lb.pack()
lb.bind('<<ListboxSelect>>', sel_done)
entry = Entry(root)
entry.pack()


def sel_done():
    entry.focus_set()

感谢您的关注。

python tkinter widget focus
1个回答
0
投票

将函数绑定到事件时,该函数必须接受参数。你的没有,所以当回调被触发时它会抛出一个错误。

另一个问题是列表框本身具有管理按钮释放焦点的绑定。要解决此问题,您可以请求在事件循环空闲后(即:在列表框完成处理事件后)更改焦点。

将它们放在一起,您的函数应如下所示:

def sel_done(event):
    entry.after_idle(entry.focus_set)
© www.soinside.com 2019 - 2024. All rights reserved.