Почему функция не видит переменную в global?

url = 'https://yandex.ru'
req = requests.get(url)
bs = BeautifulSoup(req.text, 'lxml')
tag = bs.find('tbody').text
tag_index = tag[16:28]
def convert():
    global vvod
    vvod = e1.get()
convert()
e1 = Entry(w, width=25, textvariable=vvod, state='readonly')
e1.grid(column=2, row=0)
    File "C:\Users\XXX\PycharmProjects\untitled5\main.py", line 23, in <module>
        convert()
      File "C:\Users\XXX\PycharmProjects\untitled5\main.py", line 22, in convert vvod = e1.get()
    NameError: name 'e1' is not defined

Помогите пожалуйста решить проблему, буду очень благодарен


Ответы (3 шт):

Автор решения: MAISKIY

попробуй создать пустую переменную вне функции vvod = ''

→ Ссылка
Автор решения: Danis

вы переменной vvod присваиваете значение e1.get, но вы ещё не создали e1, а для создания e1вы используете vvod поэтому функция convert бессмысленна.

vvod = ""
e1 = Entry(w, width=25, textvariable=vvod, state='readonly')
e1.grid(column=2, row=0)
→ Ссылка
Автор решения: insolor

Вы вызываете функцию convert() до того, как заполнили переменную e1, значит этой переменной не существует. Даже если переставить convert() после создания e1, из e1 будет приходить пустая строка, т.к. сразу после создания текстового поля там пусто. Нужно считывать строку после какого-то действия пользователя, например после нажатия на кнопку, пример:

def convert():
    global vvod
    vvod = e1.get()
    print(vvod)

e1 = Entry(w, width=25)
e1.grid(column=2, row=0)
Button(w, text="Нажми меня", command=convert).grid()

Убрал readonly ("только для чтения", т.е. нельзя ничего вписать), т.к. бессмысленно считывать что-то из текстового поля, в которое нельзя ничего вписать.

Также убрал передачу textvariable в Entry, т.к. туда нужно передавать объект класса StringVar, а вы, как я понимаю, туда пытаетесь передать текстовую переменную из функции convert.

→ Ссылка