Не могу заставить кнопку «Очистить» работать на моем калькуляторе

Я только начал заниматься программированием и пытался понять, как создать калькулятор с помощью tkinter, но ни разу не мог заставить кнопку «Очистить» работать. Все остальные кнопки работают, но кнопка «Очистить» ничего не делает. Выдает ошибку только в моей IDE из-за «неразрешенной ссылки «очистить»»

Я действительно застрял здесь, и, поскольку я новичок, я понятия не имею, как решить эту проблему.

Вот весь код, который в итоге копируется, но всё равно он не работает и самому я его решить не могу.

from tkinter import *
import tkinter as tk

expression = ""

def press(num):
    global expression

    expression = expression + str(num)

    equation.set(expression)

def equalpress():

    try:
        global expression
        total = str(eval(expression))

        equation.set(total)


        expression = ""

    except:

        equation.set("error")
        expression = ""

    def clearentry():
        global expression
        expression = ""
        equation.set("")

if __name__ == "__main__": 
    gui = Tk()
    gui.configure(background = "sky blue")
    gui.title("Calc is short for calculator chat")
    gui.geometry("270x150")

    equation = StringVar() 
    expression_field = Entry(gui, textvariable=equation)

    expression_field.grid(columnspan=4,ipadx=80)

    button1 = Button(gui, text = '1', fg='black', bg='white',
        command=lambda: press(1), height=1, width=7)
    button1.grid(row=2,column=0)

    button2 = Button(gui, text = '2', fg='black', bg='white',
                     command=lambda: press(2), height=1, width=7)
    button2.grid(row=2,column=1)

    button3 = Button(gui, text=' 3 ', fg='black', bg='white',
                     command=lambda: press(3), height=1, width=7)
    button3.grid(row=2, column=2)

    button4 = Button(gui, text=' 4 ', fg='black', bg='white',
                     command=lambda: press(4), height=1, width=7)
    button4.grid(row=3, column=0)

    button5 = Button(gui, text=' 5 ', fg='black', bg='white',
                     command=lambda: press(5), height=1, width=7)
    button5.grid(row=3, column=1)

    button6 = Button(gui, text=' 6 ', fg='black', bg='white',
                     command=lambda: press(6), height=1, width=7)
    button6.grid(row=3, column=2)

    button7 = Button(gui, text=' 7 ', fg='black', bg='white',
                     command=lambda: press(7), height=1, width=7)
    button7.grid(row=4, column=0)

    button8 = Button(gui, text=' 8 ', fg='black', bg='white',
                     command=lambda: press(8), height=1, width=7)
    button8.grid(row=4, column=1)

    button9 = Button(gui, text=' 9 ', fg='black', bg='white',
                     command=lambda: press(9), height=1, width=7)
    button9.grid(row=4, column=2)

    button0 = Button(gui, text=' 0 ', fg='black', bg='white',
                     command=lambda: press(0), height=1, width=7)
    button0.grid(row=5, column=0)

    plus = Button(gui, text='+', fg='black', bg='white',
                  command=lambda: press("+"), height=1, width=7)
    plus.grid(row=2, column=3)

    minus = Button(gui, text='-', fg='black', bg='white',
                  command=lambda: press("-"), height=1, width=7)
    minus.grid(row=3, column=3)

    multiply = Button(gui, text=' * ', fg='black', bg='white',
                      command=lambda: press("*"), height=1, width=7)
    multiply.grid(row=4, column=3)

    divide = Button(gui, text=' / ', fg='black', bg='white',
                    command=lambda: press("/"), height=1, width=7)
    divide.grid(row=5, column=3)

    equal = Button(gui, text=' = ', fg='black', bg='white',
                   command=equalpress, height=1, width=7)
    equal.grid(row=5, column=2)

    clear = Button(gui, text='Clear', fg='black', bg='white',
                   command= clear, height=1, width=7) **#this is where it doesnt work for me**
    clear.grid(row=5,column=1) 

    Decimal = Button(gui, text='.', fg='black', bg='white',
                     command=lambda: press('.'), height=1, width=7)
    Decimal.grid(row=6, column=0)

gui.mainloop()

Я пробовал определить ясность, используя некоторые другие методы, пробовал использовать удаление и другие методы, которые нашел в Интернете, но ничего из этого мне не помогло.

В вашем коде не определена функция clear().

acw1668 04.07.2024 02:00
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
70
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Кнопка «Очистить» не работает, поскольку функция «clearentry» определена внутри функции «equalpress», что делает ее недоступной за пределами этой области. Вам необходимо определить функциюcleentry на том же уровне, что и другие функции, чтобы ее можно было правильно вызывать с помощью кнопки очистки. Например:

clear = Button(gui, text='Clear', fg='black', bg='white',
               command= clearentry, height=1, width=7)
Ответ принят как подходящий

Кажется, вы определили свою функцию «clearentry» внутри другой области (точнее, внутри области равного нажатия). Удалив это из области равного нажатия (в VS Code выберите строки и нажмите Shift + Tab) и изменив команду в операторе Button с «clear» на «clearentry» (это функция, которую вы определили), это должно работать.

def equalpress():

    try:
        global expression
        total = str(eval(expression))

        equation.set(total)


        expression = ""

    except:

        equation.set("error")
        expression = ""

def clearentry():
    global expression
    expression = ""
    equation.set("")

и:

clear = Button(gui, text='Clear', fg='black', bg='white',
               command= clearentry, height=1, width=7)
clear.grid(row=5,column=1) 

Не могу заставить кнопку «Очистить» работать на моем калькуляторе

Проблема может быть решена.

  • В строке 29 переместите функцию clearentry() за пределы equalpress(). функция. В строке 106 замените command=clear на command= clearentry.
  • Онлайн 107, измените строку на шесть и столбец на 1.

Фрагмент:

def clearentry():
    global expression
    expression = ""
    equation.set("")

if __name__ == "__main__": 
:
:
:
    clear = Button(gui, text='Clear', fg='black', bg='white',
                   command= clearentry, height=1, width=7) 
    clear.grid(row=6,column=1) 

Скриншот:

Другие вопросы по теме