Как передать данные из виджета Entry
def registration():
button = tk.Button(text = "Зарегистрироваться" , command = get_entry).place(x = 400 , y = 340)
label = tk. Label(text = "Придумайте свой ник" , font = ("Arial" , "8")).place(x = 400 , y = 100)
entry = tk.Entry().place(x = 400, y = 120)
label = tk. Label(text = "Адрес электронной почты" , font = ("Arial" , "8")).place(x = 400 , y = 160)
entry3 = tk.Entry().place(x = 400, y = 300)
def get_entry():
s = entry.get()
print(s)
Как получить из виджета entry значение которого ввел пользователь, при нажатии на кнопку? Возникает ошибка NameError.
Ответы (1 шт):
Автор решения: insolor
→ Ссылка
entry - локальная переменная функции registration, она видна только в этой функции. Есть несколько способов решения вашей проблемы:
- создавать виджеты вне функций, так что
entryстанет глобальной переменной, доступной для всех функций - объявить переменную
entryглобальной в функцииregistration:def registration(): global entry # Дальше остальной код функции - переместить функцию
get_entryвнутрьregistration, так чтоget_entryбудет видеть все переменные внешней функции:def registration(): def get_entry(): s = entry.get() print(s) button = tk.Button(text = "Зарегистрироваться" , command = get_entry).place(x = 400 , y = 340) # Дальше остальной код - передавать entry внутрь обработчика нажатия как параметр через лямбду:
command=lambda: get_entry(entry)+ добавить параметрentryвget_entry:def get_entry(entry): s = entry.get() print(s) - обернуть все в класс, сделать
entryполем объекта, а функцииregistrationиget_entry- методами, доступ к полям объекта будет черезself(self.entry, например).