#python #python-3.x #tkinter
#python #python-3.x #tkinter
Вопрос:
Когда я пытаюсь установить фокус на виджет ввода, я получаю сообщение об ошибке,
Traceback (most recent call last):
File "C:/PythonPrograms/Tkinter/test_case.py", line 13, in <module>
entSearch.focus()
AttributeError: 'NoneType' object has no attribute 'focus'
При поиске других случаев этой ошибки в Stack overflow исправление, по-видимому, вызывало метод grid в отдельной строке.
entSearch = Entry(main, textvariable = text, width = 50, font='arial 12')
entSearch = entSearch.grid(row = 0, column = 1, sticky=W)
вместо
entSearch = Entry(main,
textvariable = text,
width = 50,
font='arial 12').grid(row = 0, column = 1, sticky=W)
К сожалению, это исправление у меня не работает.
from tkinter import *
main = Tk()
main.title("Test Case")
main.geometry('750x750')
main.configure(background='ivory3')
text = StringVar()
entSearch = Entry(main, textvariable = text, width = 50, font='arial 12')
entSearch = entSearch.grid(row = 0, column = 1, sticky=W)
entSearch.focus()
main.mainloop()
Ожидалось, что виджет ввода будет в фокусе при запуске кода.
Но вместо этого я получаю сообщение об ошибке
Traceback (most recent call last):
File "C:/PythonPrograms/Tkinter/test_case.py", line 13, in <module>
entSearch.focus()
AttributeError: 'NoneType' object has no attribute 'focus'
Ответ №1:
Функция, которую вы ищете, focus_set()
в отличие от focus()
. Краткая документация по focus_set()
методу.
Редактировать:
Кроме того, строка entSearch = entSearch.grid(row = 0, column = 1, sticky=W)
также вызывает проблемы. По умолчанию grid
метод не возвращает значение (отображает только данный виджет). Следовательно, он возвращает None
— вы сохраняете это значение в entSearch
, что означает, что вы не можете «сфокусироваться» на None
объекте. Чтобы решить эту проблему, просто удалите назначение и отобразите свой виджет как таковой: entSearch.grid(row = 0, column = 1, sticky=W)
Комментарии:
1. Спасибо за быстрый ответ. Я пытался использовать focus_set (), но получаю тот же точный результат.
2. Это сработало, спасибо!!! Кстати, я пробовал это как с focus (), так и с focus_set(). Оба работают. В чем разница?
3. О, неважно. Я вижу, что focus является псевдонимом для focus_set. Спасибо