Tkinter calculator how to clear past answer when start a new calculation

Laa Laa

I have a simple calculator code but when i want to start a new calculation after pressing equal the answer from last calculation wont get clear unless i press the clear button (it starts behind the answer), so now i want to make it clear past answer when i start new calculation. Thanks in advance!

from tkinter import *

root = Tk()
root.title("Simple Calculator")
e = Entry(root, width=35, borderwidth=5)
e.grid(row=0, column=0, columnspan=3, padx=10, pady=1)

perhaps i need some kind of boolean here

def button_click(number):
    current = e.get()
    e.delete(0, END)
    e.insert(0, str(current) + str(number))
def button_clear():
    e.delete(0, END)


def button_add():
    first_number = e.get()
    global f_num
    f_num = int(first_number)
    e.delete(0, END)


def button_equal():
    second_number = e.get()
    e.delete(0, END)

    if math == "addition":
        e.delete(0, END)
        e.insert(0, f_num + int(second_number))

    if math == "subtraction":
        e.delete(0, END)
        e.insert(0, f_num - int(second_number))

    if math == "multiplication":
        e.delete(0, END)
        e.insert(0, f_num * int(second_number))

    if math == "division":
        e.delete(0, END)
        e.insert(0, f_num / int(second_number))


def button_add():
    first_number = e.get()
    global f_num
    global math
    math = "addition"
    f_num = int(first_number)
    e.delete(0, END)


def button_subtract():
    first_number = e.get()
    global f_num
    global math
    math = "subtraction"
    f_num = int(first_number)
    e.delete(0, END)


def button_multiply():
    first_number = e.get()
    global f_num
    global math
    math = "multiplication"
    f_num = int(first_number)
    e.delete(0, END)


def button_divide():
    first_number = e.get()
    global f_num
    global math
    math = "division"
    f_num = int(first_number)
    e.delete(0, END)


button_1 = Button(root, text="1", padx=40, pady=20, bg="white", command=lambda: button_click(1))
button_2 = Button(root, text="2", padx=40, pady=20, bg="white", command=lambda: button_click(2))
button_3 = Button(root, text="3", padx=40, pady=20, bg="white", command=lambda: button_click(3))
button_4 = Button(root, text="4", padx=40, pady=20, bg="white", command=lambda: button_click(4))
button_5 = Button(root, text="5", padx=40, pady=20, bg="white", command=lambda: button_click(5))
button_6 = Button(root, text="6", padx=40, pady=20, bg="white", command=lambda: button_click(6))
button_7 = Button(root, text="7", padx=40, pady=20, bg="white", command=lambda: button_click(7))
button_8 = Button(root, text="8", padx=40, pady=20, bg="white", command=lambda: button_click(8))
button_9 = Button(root, text="9", padx=40, pady=20, bg="white", command=lambda: button_click(9))
button_0 = Button(root, text="0", padx=40, pady=20, bg="white", command=lambda: button_click(0))

button_equal = Button(root, text="=", padx=90, pady=20, bg="white", command=button_equal)
button_clear = Button(root, text="clear", padx=80, pady=20, bg="white", command=button_clear)
button_add = Button(root, text="+", padx=40, pady=20, bg="white", command=button_add)
button_subtract = Button(root, text="-", padx=40, pady=20, bg="white", command=button_subtract)
button_multiply = Button(root, text="*", padx=40, pady=20, bg="white", command=button_multiply)
button_divide = Button(root, text="/", padx=40, pady=20, bg="white", command=button_divide)


button_1.grid(row=3, column=0)
button_2.grid(row=3, column=1)
button_3.grid(row=3, column=2)

button_4.grid(row=2, column=0)
button_5.grid(row=2, column=1)
button_6.grid(row=2, column=2)

button_7.grid(row=1, column=0)
button_8.grid(row=1, column=1)
button_9.grid(row=1, column=2)

button_0.grid(row=4, column=0)
button_clear.grid(row=4, column=1, columnspan=2)
button_add.grid(row=5, column=0)
button_equal.grid(row=5, column=1, columnspan=2)

button_subtract.grid(row=6, column=0)
button_multiply.grid(row=6, column=1)
button_divide.grid(row=6, column=2)

root.mainloop()
JacksonPro

One way of doing it is by giving a signal. For example, set equals=False in the beginning, it should become True only if the user presses = button. You must keep checking if the equals become True in the button_click function, if it is True and the next inserted element is a digit then delete all the text in the text box.

Here is a demonstration. You may further improve this if you wish to.

from tkinter import *
import re

def _split(number):

    global lst
    global operation
    
    lst = re.split(r'[^\w]', number)
    lst = [x for x in lst if x!='']

    if len(lst)==1:
        return None, None
    
    lst = list(map(int, lst))

    operation = re.split(r'[\d]', number)
    
    operation = [x for x in operation if x != '']
    

    return lst, operation

def operate(numbers, operation):
    
    if operation == '+':
        return numbers[0] + numbers[1]

    elif operation == '-':
        return numbers[0] - numbers[1]

    elif operation == '*':
        return numbers[0] * numbers[1]

    elif operation == '/':
        try:
            return numbers[0]/numbers[1]

        except:
            print('ERROR')
            
    else:
        print('Invalid operation')

    
def button_click(number):
  
    global equals

    operand = []
    
    e.insert(END, str(number))
    
    if e.get()[-1:].isdigit() and equals:
        e.delete(0, END)
        e.insert(END, str(number))
    
    equals = False

    operand, operation = _split(e.get())

    if operation != None and len(operation)==2:
        value = operate(operand, operation[0])
        e.delete(0, END)
        e.insert(0, f'{value}{operation[1]}')
    
def button_clear():
    e.delete(0, END)


def button_equal():
    global equals
    number = e.get()
    operand, operation = _split(number)

    value = number
    
    if operand and operation:
        value = operate(operand, operation[0])
        equals = True 
    
    
    e.delete(0, END)
    e.insert(0, value)


root = Tk()
root.title("Simple Calculator")

e = Entry(root, width=35, borderwidth=5)
e.grid(row=0, column=0, columnspan=3, padx=10, pady=1)

equals = False
operation = None
lst = [0]

button_1 = Button(root, text="1", padx=40, pady=20, bg="white", command=lambda: button_click(1))
button_2 = Button(root, text="2", padx=40, pady=20, bg="white", command=lambda: button_click(2))
button_3 = Button(root, text="3", padx=40, pady=20, bg="white", command=lambda: button_click(3))
button_4 = Button(root, text="4", padx=40, pady=20, bg="white", command=lambda: button_click(4))
button_5 = Button(root, text="5", padx=40, pady=20, bg="white", command=lambda: button_click(5))
button_6 = Button(root, text="6", padx=40, pady=20, bg="white", command=lambda: button_click(6))
button_7 = Button(root, text="7", padx=40, pady=20, bg="white", command=lambda: button_click(7))
button_8 = Button(root, text="8", padx=40, pady=20, bg="white", command=lambda: button_click(8))
button_9 = Button(root, text="9", padx=40, pady=20, bg="white", command=lambda: button_click(9))
button_0 = Button(root, text="0", padx=40, pady=20, bg="white", command=lambda: button_click(0))

button_equal = Button(root, text="=", padx=90, pady=20, bg="white", command=button_equal)
button_clear = Button(root, text="clear", padx=80, pady=20, bg="white", command=button_clear)
button_add = Button(root, text="+", padx=40, pady=20, bg="white", command=lambda :button_click('+'))
button_subtract = Button(root, text="-", padx=40, pady=20, bg="white", command=lambda :button_click('-'))
button_multiply = Button(root, text="*", padx=40, pady=20, bg="white", command=lambda :button_click('*'))
button_divide = Button(root, text="/", padx=40, pady=20, bg="white", command=lambda :button_click('/'))


button_1.grid(row=3, column=0)
button_2.grid(row=3, column=1)
button_3.grid(row=3, column=2)

button_4.grid(row=2, column=0)
button_5.grid(row=2, column=1)
button_6.grid(row=2, column=2)

button_7.grid(row=1, column=0)
button_8.grid(row=1, column=1)
button_9.grid(row=1, column=2)

button_0.grid(row=4, column=0)
button_clear.grid(row=4, column=1, columnspan=2)
button_add.grid(row=5, column=0)
button_equal.grid(row=5, column=1, columnspan=2)

button_subtract.grid(row=6, column=0)
button_multiply.grid(row=6, column=1)
button_divide.grid(row=6, column=2)

root.mainloop()

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

Calculator clear result when pressing a new number

Overlapping progress bars. How to clear past progress bar, when new one starts

Javascript Calculator, how do I clear the output when a new number is inputted?

How to clear what's inside a Text Widget when the user presses a new number in Tkinter?

Saving the output of calculation as the new input of a calculator

PHP Calculator: Undefined Overflow when answer is 0

How to remove the calculation done in a calculator using python when I already specify an error message

Wait The past function to finish to start a new one

How to clear Tkinter Canvas?

how to Clear graph tkinter

Make clear button backspace by one in python tkinter calculator

How to display a numeric answer instead of a calculation?

how do i clear the screen of a calculator in php

ActiveMQ - How to clear the queue when ActiveMQ instance start

Tkinter calculator program not working when i import it

Square root calculator breaks when asked for more precise answer

Calculator Clear button functionality isn't working as desired. set to 0 causes multiplication to = 0 . Desire AC to give same result as new start ups

How to clear out and reuse p:dialog when adding new items

How to clear bitmap memory of previous activity when open new one

React: how to clear previous results when there is a new search with no results

How to clear a destination table when importing new data?

How to show comma only once in tkinter calculator

How to use Tkinter Buttons to help in calculator

how to clear a FigureCanvasTkAgg canvas in tkinter

How to clear an entire Treeview with Tkinter

How to clear Tkinter ListBox Python

How to reset and start new timer when enter new email

Calculator, clear window when second variable is typed after chosen operator

How can I solve a string version of a calculation for a simple calculator?