@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 раз должно выпасть сообщение "отстань".
Помогите пожалуйста найти ошибку в коде)))
  • Вопрос задан
  • 91 просмотр
Пригласить эксперта
Ответы на вопрос 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
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы