Как установить фокус на виджет ttk.Entry? - PullRequest
0 голосов
/ 15 июня 2019

Я пытаюсь построить базовый пример пользовательского интерфейса с помощью tkinter / ttk.Этот интерфейс имеет поле 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 Ответ

1 голос
/ 15 июня 2019

Я не уверен в причине, но вы можете обойти ее, используя root.after:

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