Seite 1 von 1

Prozedurfehler beim Taschenrechner

Verfasst: Freitag 23. Juni 2006, 18:02
von GanzKrasser
Hi Leute! ich bin neu hier im Forum (wie ihr sicher schon seht) und habe eine Frage bezüglich meines Progammes:

Ich habe die Prozeduren "loeschen_2", "wurzel" und "hoch" aus der Klasse "Display" bis jetzt noch nicht zum Laufen gebracht. Kann mir bitte jemand helfen? Danke im Voraus!

Code: Alles auswählen

from Tkinter import*

class Taschenrechner(Tk):
    def __init__(self):
        Tk.__init__(self)
        self.title ('Taschenrechner')
        self.ende=0
        self.display=Display(self)
        self.display.grid(column=0, row=0, sticky=E+W,
                          columnspan=10,pady=5)
        tasten=[(0,1,'7'),(1,1,'8'),(2,1,'9'),(3,1,'+'),
                (0,2,'4'),
                (1,2,'5'),(2,2,'6'),(3,2,'-'),(4,2,'('),
                (6,2,')'),(0,3,'1'),(1,3,'2'),
                (2,3,'3'),(3,3,'*'),
                (6,3,''),(0,4,'0'),(1,4,'.'),(2,4,''),
                (3,4,'/')]

        for tupel in tasten:
            Taste(self, tupel[2]).grid(column=tupel[0], row=tupel[1])
            Clear(self).grid(column=5, row=1)
            Gleich(self).grid(column=5, row=2)
            All_Clear(self).grid(column=4, row=1)
            Wurzel(self).grid(column=4, row=3)
            Hoch(self).grid(column=5, row=3)
        self.mainloop()



################################################################################


class Taste(Button):
    def __init__(self, fenster, aufschrift):
        Button.__init__(self, fenster, text=aufschrift,
                        command=self.druecken,width=3)
        self.aufschrift=aufschrift
        self.fenster=fenster
        
    def druecken(self):
        d=self.fenster.display
        if self.fenster.ende:
            d.delete(0, len(d.get()))
            self.fenster.ende = 0
        d.anhaengen(self.aufschrift)

class Clear(Button):
    def __init__(self, fenster):
        Button.__init__(self, fenster, text='C',
                        command=self.loeschen, width=3)
        self.display = fenster.display

    def loeschen(self):
        self.display.loeschen()

class All_Clear(Button):
    def __init__(self, fenster):
        Button.__init__(self, fenster, text='AC',
                        command=self.loeschen_2, width=3)
        self.display = fenster.display

    def loeschen_2(self):
        self.display.loeschen_2()

class Wurzel(Button):
    def __init__(self, fenster):
        Button.__init__(self, fenster, text='sqrt',
                        command=self.wurzel, width=3)
        self.display = fenster.display

    def wurzel(self):
        self.display.wurzel()

class Hoch(Button):
    def __init__(self, fenster):
        Button.__init__(self, fenster, text='^',
                        command=self.hoch, width=3)
        self.display = fenster.display

    def hoch(self):
        self.display.hoch()
        
class Gleich(Button):
    def __init__(self, fenster):
        Button.__init__(self, fenster, text='=',
                        command=self.rechnen,width=3)
        self.fenster=fenster

    def rechnen(self):
        ergebnis=eval(self.fenster.display.get())
        ende=len(self.fenster.display.get())
        self.fenster.display.insert(ende, '='+str(ergebnis))
        self.fenster.ende=1

class Display(Entry):
    def __init__(self,fenster):
        Entry.__init__(self,fenster,width=20)
    def anhaengen(self,zeichen):
        self.insert(len(self.get()),zeichen)

    def loeschen(self):
        self.delete(len(self.get())-1)
        
    def loeschen_2(self):
        self.delete("1.0",END)
        
    def wurzel(self):
        self.insert ("**(1.000/2)")

    def hoch(self):
        self.insert ('**')

  



t = Taschenrechner()
                  

[/code]

Verfasst: Freitag 23. Juni 2006, 19:30
von querdenker
1.) Das riecht förmlich nach Hausaufgaben
2.) Was passiert den, oder was auch nicht?
3.) Bekommst du Fehlermeldungen?

Kleiner Lesetipp: Unter Allgemeines die ersten Beiden Einträge

mfg, querdenker

Verfasst: Sonntag 25. Juni 2006, 18:48
von GanzKrasser
querdenker hat geschrieben:1.) Das riecht förmlich nach Hausaufgaben
Da muss ich dich leider enttäuschen, denn das Schuljahr ist ja schon fast zuende und die Zensuren stehen fest. Ich hab das als Projekt geplant und bin eben in den letzten Zügen steckengeblieben...

Fehlermeldung:

AC-Button

Code: Alles auswählen

Exception in Tkinter callback
Traceback (most recent call last):
  File "D:\Programme\Python22\lib\lib-tk\Tkinter.py", line 1300, in __call__
    return apply(self.func, args)
  File "A:\SPr\Tk_Taschenrechner.py", line 63, in loeschen_2
    self.display.loeschen_2()
  File "A:\SPr\Tk_Taschenrechner.py", line 105, in loeschen_2
    self.delete("1.0",END)
  File "D:\Programme\Python22\lib\lib-tk\Tkinter.py", line 2183, in delete
    self.tk.call(self._w, 'delete', first, last)
TclError: bad entry index "1.0"
sqrt-Button (Wurzel):

Code: Alles auswählen

Exception in Tkinter callback
Traceback (most recent call last):
  File "D:\Programme\Python22\lib\lib-tk\Tkinter.py", line 1300, in __call__
    return apply(self.func, args)
  File "A:\SPr\Tk_Taschenrechner.py", line 72, in wurzel
    self.display.wurzel()
  File "A:\SPr\Tk_Taschenrechner.py", line 108, in wurzel
    self.insert ("**(1.000/2)")
TypeError: insert() takes exactly 3 arguments (2 given)
hoch-Button:

Code: Alles auswählen

Exception in Tkinter callback
Traceback (most recent call last):
  File "D:\Programme\Python22\lib\lib-tk\Tkinter.py", line 1300, in __call__
    return apply(self.func, args)
  File "A:\SPr\Tk_Taschenrechner.py", line 81, in hoch
    self.display.hoch()
  File "A:\SPr\Tk_Taschenrechner.py", line 111, in hoch
    self.insert ('**')
TypeError: insert() takes exactly 3 arguments (2 given)
Das sind die Fehlermeldungen. Im Moment arbeite ich noch daran eine Menüleiste oben einzufügen und dann muss ich noch das Fehlerabfangen hinkriegen...
Zu den Fehlermeldungen: Ich weiß, was sie bedeuten, kann sie aber nicht umgehen, weil ich nicht weiß, wie...
Danke im Voraus für die Hilfe!

Verfasst: Montag 26. Juni 2006, 10:57
von BlackJack
GanzKrasser hat geschrieben:

Code: Alles auswählen

Exception in Tkinter callback
Traceback (most recent call last):
  File "D:\Programme\Python22\lib\lib-tk\Tkinter.py", line 1300, in __call__
    return apply(self.func, args)
  File "A:\SPr\Tk_Taschenrechner.py", line 63, in loeschen_2
    self.display.loeschen_2()
  File "A:\SPr\Tk_Taschenrechner.py", line 105, in loeschen_2
    self.delete("1.0",END)
  File "D:\Programme\Python22\lib\lib-tk\Tkinter.py", line 2183, in delete
    self.tk.call(self._w, 'delete', first, last)
TclError: bad entry index "1.0"
So ein `Entry` hat nur eine Zeile, da braucht man nur die Spalte angeben.
sqrt-Button (Wurzel):

Code: Alles auswählen

Exception in Tkinter callback
Traceback (most recent call last):
  File "D:\Programme\Python22\lib\lib-tk\Tkinter.py", line 1300, in __call__
    return apply(self.func, args)
  File "A:\SPr\Tk_Taschenrechner.py", line 72, in wurzel
    self.display.wurzel()
  File "A:\SPr\Tk_Taschenrechner.py", line 108, in wurzel
    self.insert ("**(1.000/2)")
TypeError: insert() takes exactly 3 arguments (2 given)

Code: Alles auswählen

In [14]: Tk.Entry.insert?
Type:           instancemethod
Base Class:     <type 'instancemethod'>
String Form:    <unbound method Entry.insert>
Namespace:      Interactive
File:           /usr/lib/python2.4/lib-tk/Tkinter.py
Definition:     Tk.Entry.insert(self, index, string)
Docstring:
    Insert STRING at INDEX.
Ganz offensichtlich gibst Du ein Argument zu wenig an.
Zu den Fehlermeldungen: Ich weiß, was sie bedeuten, kann sie aber nicht umgehen, weil ich nicht weiß, wie...
Doku lesen hilft manchmal. ;-)