tl; dr: когда приложение вызывает tkinter.filedialog
, поля entry
не фокусируются должным образом.
Длинное объяснение:
При инициализации приложения tkinter поля entry
включены по умолчанию. Их состояние tk.ENABLED
, на них можно сфокусироваться, прокручивая поля с помощью tab
, и, самое главное, на них можно щелкнуть, чтобы выбрать поле.
По какой-то причине это поведение нарушается при вызове tkinter.filedialog
. Если вызывается метод tkinter.filedialog
, например askdirectory
или askopenfile()
, поле entry
по-прежнему будет иметь состояние tk.ENABLED
, и фон будет правильно стилизован, но нажатие на поле ввода не будет вставьте курсор или выберите поле. Набор текста, конечно, не регистрируется.
Это можно обойти, переключившись в другое окно и вернувшись назад. Тем не менее, диалоговые окна файлов (должным образом) возвращают пользователя обратно в главное окно, поэтому пользователям всегда предоставляется главное окно, которое выглядит заблокированным.
См. Этот пример:
import tkinter as tk
from tkinter import filedialog
BR8K = True
root = tk.Tk()
if BR8K:
filedialog.askdirectory()
entry = tk.Entry(root, takefocus=True, highlightthickness=2)
entry.grid(sticky="WE")
root.mainloop()
Здесь код работает правильно, если BR8K
равен False
, и неправильно, если BR8K
равен True
.
(Примечание. В производственной среде это будет объектно-ориентированным. Проблема сохраняется в объектно-ориентированной среде.)