Я только начал заниматься программированием и пытался понять, как создать калькулятор с помощью 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()
Я пробовал определить ясность, используя некоторые другие методы, пробовал использовать удаление и другие методы, которые нашел в Интернете, но ничего из этого мне не помогло.
Кнопка «Очистить» не работает, поскольку функция «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)
Не могу заставить кнопку «Очистить» работать на моем калькуляторе
Проблема может быть решена.
clearentry()
за пределы equalpress()
.
функция.
В строке 106 замените command=clear
на command= clearentry
.Фрагмент:
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)
Скриншот:
В вашем коде не определена функция
clear()
.