Тебе нужно сделать переменную answer доступной вне функции vich и проверять её существование перед попыткой удаления.
Попробуй так:
def click1():
# Инициализируем переменную answer как None, чтобы она была доступна глобально внутри click1
answer = None
def vich():
nonlocal answer # Указываем, что answer находится в окружающей области видимости
vil_a = int(a.get())
c = vil_a ** 2
# Удаляем старую метку ответа, если она существует
if answer:
answer.destroy()
answer = Label(window, text='Ответ: ' + str(c), font=("Arial Bold", 30))
answer.place(x=220, y=180)
choice4 = Button(window, text="Вычислить", command=vich)
choice4.place(x=219, y=45)
def back():
nonlocal answer # Снова указываем, что answer находится в окружающей области видимости
a.destroy()
b.destroy()
choice4.destroy()
back.destroy()
# Удаляем метку ответа, только если она была создана
if answer:
answer.destroy()
# Возвращаем кнопки в исходное состояние
choice1.configure(state=ACTIVE)
choice2.configure(state=ACTIVE)
choice3.configure(state=ACTIVE)
choice5.configure(state=ACTIVE)
choice6.configure(state=ACTIVE)
back = Button(window, image=photo4, text="Назад", command=back, compound=RIGHT)
back.place(x=0, y=150)
Chudo_ChudnoeМастер (2187)
1 год назад
Этот код уже настроен для использования переменной answer в обеих функциях vich и back через использование ключевого слова nonlocal.
Это позволяет обеим функциям обращаться к одной и той же переменной answer, которая определена в функции click1
nonlocal используется для объявления переменных, которые не являются ни локальными в текущей функции, ни глобальными в модуле, но находятся в промежуточной области видимости, то есть в области видимости окружающей функции. Это то что тебе нужно для переменной answer.
Chudo_ChudnoeМастер (2187)
1 год назад
Если подробнее, то это работает так:
Переменная answer инициализируется как None в функции click1, что делает её доступной во вложенных функциях vich и back.
В функции vich, ты используешь nonlocal answer для указания, что переменная answer находится в окружающей области видимости. Здесь ты изменяешь answer, создавая новый виджет Label и размещая его в окне.
Как и в функции back ты снова указываешь nonlocal answer. Здесь ты можешь проверять, существует ли виджет answer и удалять его при необходимости.
я не нажал на кнопку вычислить(choice4) - по которой она должна появляться и мне вывело ошибку, и окно закрылось, как мне сделать так что бы условие "def back()" пропускал строку "answer.destroy()" и не выводила ошибку, а когда я нажимал вычислить(choice4) то условие "def back()" не пропускал его и выполнял эту строку, если поможете то всю жизнь буду благодарен