如何将焦点设置到 ttk.Entry 小部件?
How to set focus to a ttk.Entry widget?
我正在尝试使用 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
我不确定原因,但您可以使用 root.after
:
解决此问题
def doSomething(event, entryField):
messagebox.showwarning('', 'Warning')
entryField.delete(0, END)
root.after(1, lambda: entryField.focus_set())
我正在尝试使用 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
我不确定原因,但您可以使用 root.after
:
def doSomething(event, entryField):
messagebox.showwarning('', 'Warning')
entryField.delete(0, END)
root.after(1, lambda: entryField.focus_set())