Problem w kodzie - kalkulator w Tkinter

0

Napisałem kod kalkulatora z GUI w Tkinter. Wymyśliłem sobie, że pod literką C będę miał funkcję która będzie kasować ostatnią wpisaną cyfrę lub znak. Takie zwykłe cofnij. Próbowałem do tego wykorzystać .delete(END) ale coś ewidentnie robię nie tak.

Poniżej wklejam cały kod. Funkcja która mnie interesuje ma nazwę Cancel. Będę wdzięczny za pomoc.

import sys
from tkinter import *

calculator = Tk()
calculator.title("Calculator by Grzego")
calculator.resizable(0, 0)

class Application(Frame):
    def __init__(self, master, *args, **kwargs):
        Frame.__init__(self, master, *args, **kwargs)
        self.CreateWidgets()

    def Calculation(self):
        self.calculation = self.display.get()
        self.calculation = self.calculation.replace("%", "/100")

        try:
            self.result = eval(self.calculation)
            self.Replace(self.result)
        except:
            messagebox.showinfo("Error", "Invalid input")

    def Replace(self, text):
        self.display.delete(0, END)
        self.display.insert(0, text)

    def Append(self, text):
        self.entryText = self.display.get()
        self.textLenght = len(self.entryText)

        if self.entryText == "0":
            self.Replace(text)
        else:
            self.display.insert(self.textLenght, text)

    def Cancel(self):
        self.entryText.delete(END)

    def Clear(self):
        self.Replace("0")

    def CreateWidgets(self):
        self.display = Entry(self, font=("Helvetica", 16), borderwidth=0, relief=RAISED, justify=RIGHT)
        self.display.insert(0, "0")
        self.display.grid(row=0, column=0, columnspan=5)

        self.Seven = Button(self, font=("Helvetica", 11), text="7", borderwidth=1, command=lambda: self.Append("7"))
        self.Seven.grid(row=1, column=0, sticky="NWNESWSE")

        self.Eight = Button(self, font=("Helvetica", 11), text="8", borderwidth=1, command=lambda: self.Append("8"))
        self.Eight.grid(row=1, column=1, sticky="NWNESWSE")

        self.Nine = Button(self, font=("Helvetica", 11), text="9", borderwidth=1, command=lambda: self.Append("9"))
        self.Nine.grid(row=1, column=2, sticky="NWNESWSE")

        self.Percent = Button(self, font=("Helvetica", 11), text="%", borderwidth=1, command=lambda: self.Append("%"))
        self.Percent.grid(row=1, column=3, sticky="NWNESWSE")

        self.Plus = Button(self, font=("Helvetica", 11), text="+", borderwidth=1, command=lambda: self.Append("+"))
        self.Plus.grid(row=1, column=4, sticky="NWNESWSE")

        self.Four = Button(self, font=("Helvetica", 11), text="4", borderwidth=1, command=lambda: self.Append("4"))
        self.Four.grid(row=2, column=0, sticky="NWNESWSE")

        self.Five = Button(self, font=("Helvetica", 11), text="5", borderwidth=1, command=lambda: self.Append("5"))
        self.Five.grid(row=2, column=1, sticky="NWNESWSE")

        self.Six = Button(self, font=("Helvetica", 11), text="6", borderwidth=1, command=lambda: self.Append("6"))
        self.Six.grid(row=2, column=2, sticky="NWNESWSE")

        self.Multiply = Button(self, font=("Helvetica", 11), text="*", borderwidth=1, command=lambda: self.Append("*"))
        self.Multiply.grid(row=2, column=3, sticky="NWNESWSE")

        self.Minus = Button(self, font=("Helvetica", 11), text="-", borderwidth=1, command=lambda: self.Append("-"))
        self.Minus.grid(row=2, column=4, sticky="NWNESWSE")

        self.One = Button(self, font=("Helvetica", 11), text="1", borderwidth=1, command=lambda: self.Append("1"))
        self.One.grid(row=3, column=0, sticky="NWNESWSE")

        self.Two = Button(self, font=("Helvetica", 11), text="2", borderwidth=1, command=lambda: self.Append("2"))
        self.Two.grid(row=3, column=1, sticky="NWNESWSE")

        self.Three = Button(self, font=("Helvetica", 11), text="3", borderwidth=1, command=lambda: self.Append("3"))
        self.Three.grid(row=3, column=2, sticky="NWNESWSE")

        self.Divide = Button(self, font=("Helvetica", 11), text="/", borderwidth=1, command=lambda: self.Append("/"))
        self.Divide.grid(row=3, column=3, sticky="NWNESWSE")

        self.Equal = Button(self, font=("Helvetica", 11), text="=", borderwidth=1, command=lambda: self.Calculation())
        self.Equal.grid(row=3, column=4, rowspan=2, sticky="NWNESWSE")

        self.Cancel = Button(self, font=("Helvetica", 11), text="C", borderwidth=1, command=lambda: self.Cancel)
        self.Cancel.grid(row=4, column=0, sticky="NWNESWSE")

        self.Zero = Button(self, font=("Helvetica", 11), text="0", borderwidth=1, command=lambda: self.Append("0"))
        self.Zero.grid(row=4, column=1, sticky="NWNESWSE")

        self.Clear = Button(self, font=("Helvetica", 11), text="CE", borderwidth=1, command=self.Clear)
        self.Clear.grid(row=4, column=2, sticky="NWNESWSE")

        self.Dot = Button(self, font=("Helvetica", 11), text=".", borderwidth=1, command=lambda: self.Append("."))
        self.Dot.grid(row=4, column=3, sticky="NWNESWSE")

app = Application(calculator).grid()

calculator.mainloop()

0

Może coś takiego pomoże :

        actual_state = self.display.get()
        new_state = actual_state[:len(actual_state)-1]
        self.display.delete(0, END)
        self.display.insert(0, new_state)

1

Przepraszam za powyższy post, poprawiam:

 def Cancel(self):
        actual_state = self.display.get()
        new_state = actual_state[:len(actual_state)-1]
        self.display.delete(0, END)
        self.display.insert(0, new_state)


1

Funkcje Cancel można zamienić tak:


def Cancel(self):
        self.Replace(self.display.get()[0:len(self.display.get())-1])

i przy deklarowaniu buttona Cancel zmień:

command=self.Cancel

0

@Wmok @kejkun1992 dzięki za podpowiedzi. Obydwie wersje działają! Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1