Problem w kodzie - kalkulator w Tkinter

Problem w kodzie - kalkulator w Tkinter
GR
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad 5 lat
  • Postów:14
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.

Kopiuj
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 :

Kopiuj
        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:

Kopiuj
 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)


kejkun1992
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 6 lat
  • Postów:2
1

Funkcje Cancel można zamienić tak:

Kopiuj

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

i przy deklarowaniu buttona Cancel zmień:

command=self.Cancel

edytowany 2x, ostatnio: kejkun1992
GR
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad 5 lat
  • Postów:14
0

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

edytowany 1x, ostatnio: Grzegooo

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.