Python, Tkinter — UnboundLocalError: локальная переменная «Метка», на которую ссылаются перед назначением?

#python #python-3.x #tkinter

Вопрос:

Я только начал изучать python и tkinter, и во время разработки простой программы я получаю UnboundLocalError: local variable 'Label' referenced before assignment , нажимая Team кнопку. Individual кнопка работает по плану.

Я не понимаю, как решить эту проблему. Мой код:

 Label = Label(root, text = "How many members in your team")
Label.grid(row = 0, column = 0, columnspan = 2,padx = 20,pady = 20)
 

Комментарии:

1. В строке Label = Label(root, text = "Entering as team or individual") , что находится Label на RHS = знака?

2. изменить Label = Label(...) на my_label = Label(...)

3. @RitwikG Label — это класс tkinter, импортированный в линию: from tkinter import *

4. Хорошо. Я думаю, что ошибка может быть, так как он изменяет Label переменную в качестве возвращаемого значения Label(root, text = "Entering as team or individual") . @TheLizzard, как вы предложили, внесение изменений должно решить проблему. @Student в любом случае попробуйте добавить трассировку ошибок, так как это прояснит, где именно возникает эта ошибка.

5. Ваш код слишком непитоничен (я пытался и не смог его исправить). Вы продолжаете ссылаться Label (как на tkinter.Label объект) перед его определением. У вас есть перекрывающиеся виджеты. У вас есть импорт, разбросанный по вашей программе. Вы даже не используете последовательный интервал между белыми буквами. Ваши имена переменных совсем не полезны. Почему у вас есть global Tk ?

Ответ №1:

Когда вы это сделаете Label = Label(...) , python увидит Label = часть и сделает вывод, что Label это локальная переменная, поскольку вы не объявили ее глобальной. Затем, когда python пытается это сделать Label(...) , он все еще думает Label , что это локальная переменная, но она еще не была инициализирована, поэтому выдает local variable 'Label' referenced before assignment ошибку.

Корень проблемы в том, что вы используете Label имя переменной, но Label оно уже было импортировано в качестве имени класса.

Исправление простое: не создавайте переменную с именем Label . Дайте ему какое-нибудь другое название.