焦点问题

伯特_AT

我正在尝试将焦点返回到第一个条目。如果您将焦点移到下一个条目或按钮,然后单击该按钮,焦点将返回到第一个条目。当我尝试使用 tab 键做同样的事情时,focus_set 方法失败。我尝试了很多不同的方法,但结果总是一样的。有谁知道为什么?并且可能会很友好地向我展示如何正确地做?提前致谢。

这是我到目前为止得到的:

from tkinter import *
w = Tk()

def focus():
    box1.focus_set()

def check(event):
    if str(event.widget) == '.!entry2':
        print('focus back to box1')
        focus()

box1 = Entry(w, width=15)
box2 = Entry(w, width=15)
box1.focus_set()
box2.bind('<Tab>', check)
box1.pack()
box2.pack()

btn = Button(w, text='Box 1 Focus', command=focus)
btn.pack()
w.mainloop()
fhdrsdg

如果我运行您的代码,str(event.widget)则类似于".36580648",而不是".!entry2"你可以给你的小部件一个自定义名称,比如

box2 = Entry(w, width=15, name='second')

然后你可以检查if str(event.widget) == '.second'
或者,您可以只检查if event.widget == box2:哪个更容易且更不容易出错。

如果您执行其中一项操作,您将看到'focus back to box1'已打印,但焦点仍会转移到按钮而不是标签。这是因为您的自定义事件在 的默认事件之前触发<Tab>,即将焦点移至下一个小部件。您可以通过返回'break'函数来停止默认事件处理

完整的例子将变成:

from tkinter import *
w = Tk()

def focus():
    box1.focus_set()

def check(event):
    if event.widget == box2:
        print('focus back to box1')
        focus()
        return 'break'

box1 = Entry(w, width=15)
box2 = Entry(w, width=15)
box1.focus_set()
box2.bind('<Tab>', check)
box1.pack()
box2.pack()

btn = Button(w, text='Box 1 Focus', command=focus)
btn.pack()
w.mainloop()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章