如何将焦点设置为ttk.Entry小部件?

时间:2019-06-14 22:49:52

标签: tkinter ttk

我正在尝试使用tkinter / ttk构建一个基本的示例UI。该界面具有一个ttk.Entry字段和一个ttk.Button,它基本上只是清除输入字段中的内容,并将焦点设置回输入字段

from tkinter import *
from tkinter import messagebox
from tkinter import ttk

def doSomething(event, entryField):
    messagebox.showwarning('', 'Warning')
    entryField.delete(0, END)
    entryField.focus_set()
    entryField.focus()

root = Tk()
entryField = ttk.Entry(root)
entryField.grid(row=0, column=0)
entryField.focus()
b = ttk.Button(root, text='Clear and focus back')
b.grid(row=1, column=0)
b.bind('<Button-1>',
       lambda event, entryField=entryField:
       doSomething(event, entryField))
root.mainloop()

问题在于警告消息后它不会重新聚焦到输入字段。 如果我使用Entry而不是ttk.Entry

,则代码有效

1 个答案:

答案 0 :(得分:1)

我不确定原因,但是您可以使用root.after解决此问题:

def doSomething(event, entryField):
    messagebox.showwarning('', 'Warning')
    entryField.delete(0, END)
    root.after(1, lambda: entryField.focus_set())