Не удается установить фокус () для виджета ввода

#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. Спасибо