Задать вопрос
@MaxPython375
Не плохо программирую на Python.

Где ошибка в коде?

Не работает код. Вылазит ошибка:
if te == 0:
UnboundLocalError: local variable 'te' referenced before assignment

Вот упрощённый код который не работает:
from tkinter import *
from time import sleep

window = Tk()

def up():
    window.update()

c = Canvas(window, width=20, height=20)
c.pack()
l1 = c.create_oval(5,5, 20,20, fill="white")
l2 = c.create_oval(10,10, 15,15, fill="black")
te = 5
def te_leave_click():
    if te == 0:
        l = Label(window, text="отстань")
        l.pack()
        sl(2)
        l.pack_forget()
        te = 5
    elif te != 0:
        te -= 1

def sl(time):
    for i in range(time):
        sleep(1)
        up()

def itemb():
    c.itemconfig(l1, fill="black")
    up()
def itemw():
    c.itemconfig(l1, fill="white")
    up()

def cl(event):
    itemb()
    te_leave_click()
def cl2(event):
    itemw()

c.bind("<Enter>", cl)
c.bind("<Leave>", cl2)

Программа должна работать так:
Появляется глаз, наводишь на него мышь и он закрывается. Сделав так 5 раз должно выпасть сообщение "отстань".
Помогите пожалуйста найти ошибку в коде)))
  • Вопрос задан
  • 95 просмотров
Подписаться 1 Простой 6 комментариев
Помогут разобраться в теме Все курсы
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Skillbox
    Профессия Python-разработчик + ИИ
    10 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 2
alfss
@alfss
https://career.habr.com/alfss
Просто перестаньте использовать глобальные переменные
Ответ написан
SoreMix
@SoreMix Куратор тега Python
yellow
Ошибка в присвоении значения переменной, которая объявлена вне этой функции

А именно te = 5 и te -= 1 здесь:
def te_leave_click():
    if te == 0:
        l = Label(window, text="отстань")
        l.pack()
        sl(2)
        l.pack_forget()
        te = 5
    elif te != 0:
        te -= 1


Если вы хотите изменить значение te, то используйте return
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Краснодар
от 220 000 до 300 000 ₽
ITK academy Краснодар
от 75 000 ₽
DimaTech Ltd Краснодар
от 140 000 до 140 000 ₽