Tkinter-Taschenrechner-Frage

Fragen zu Tkinter.
Antworten
LG_157

Hey,
muss bis Freitag für die Schule nen Taschenrechner fertigstellen.
Vorlage haben wir bekommen und erweitert.
Nur habe ich Probleme bei + - und = , wenn ich die button drücke erscheint einfach nur + - oder = ...
Aber ein Rechner muss ja rechnen können,bin schon soweit:

Code: Alles auswählen

from Tkinter import *

global anzeige
global masterstring
masterstring = " "


def Rechner (master):
    global anzeige

    frame = Frame(master)
    frame.pack()

    frame0 = Frame(frame)
    frame0.pack(side=TOP)

    frame1 = Frame(frame)
    frame1.pack(side=TOP)

    frame2 = Frame(frame)
    frame2.pack(side=TOP)

    frame3 = Frame(frame)
    frame3.pack(side=TOP)

    anzeige = Label(frame0, bg="#FFFFFF", bd=10, width=20,relief="sunken", anchor="e")
    anzeige.pack(side=TOP)
    
    B2 = Button(frame3, text="=", bg="green", width=5,command=gleich)
    B2.pack(side=RIGHT)
    
    B3 = Button(frame1, text="-", bg="blue", width=5,command=minus)
    B3.pack(side=RIGHT)

    B4 = Button(frame2, text="+", bg="red", width=5,command=plus)
    B4.pack(side=RIGHT)
    
    B5 = Button(frame1, text="7", bg="light yellow", width=5,command=sieben)
    B5.pack(side=LEFT)

    B6 = Button(frame1, text="8", bg="light yellow", width=5,command=acht)
    B6.pack(side=LEFT)

    B7 = Button(frame1, text="9", bg="light yellow", width=5,command=neun)
    B7.pack(side=LEFT)

    B9 = Button(frame2, text="4", bg="light yellow", width=5,command=vier)
    B9.pack(side=LEFT)

    B10 = Button(frame2, text="5", bg="light yellow", width=5,command=fuenf)
    B10.pack(side=LEFT)

    B11 = Button(frame2, text="6", bg="light yellow", width=5,command=sechs)
    B11.pack(side=LEFT)

    B13 = Button(frame3, text="1", bg="light yellow", width=5,command=eins)
    B13.pack(side=LEFT)

    B14 = Button(frame3, text="2", bg="light yellow", width=5,command=zwei)
    B14.pack(side=LEFT)

    B15 = Button(frame3, text="3", bg="light yellow", width=5,command=drei)
    B15.pack(side=LEFT)

    anzeige.configure(text= "Machen Sie eine Eingabe")

def gleich():
    add_to_string('=')
def minus():
    add_to_string('-')
def plus():
    add_to_string('+')
def eins():
    add_to_string('1')
def zwei():
    add_to_string('2')
def drei():
    add_to_string('3')
def vier():
    add_to_string('4')
def fuenf():
    add_to_string('5')
def sechs():
    add_to_string('6')
def sieben():
    add_to_string('7')
def acht():
    add_to_string('8')
def neun():
    add_to_string('9')
    
def add_to_string(pWert):
    global masterstring
    global anzeige
    
    masterstring = masterstring + str(pWert)
    anzeige.configure(text = masterstring)
    print masterstring    


root = Tk()
Rechner(root)
root.mainloop()    

     
hoffe mal ihr könnt mir helfen.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Also bei mir gibt es erstmal einen NameError ;-)

Zu deinem Problem: dann mach doch etwas anderes in den Funktionen "gleich", "minus", ... als nur ein Zeichen anzuhängen.

Das der Code viel zu lang und tausende Wiederholungen enthalten sind, dazu sage ich erstmal nichts. Wahrscheinlich soll es einfach nur funktionieren ^^
Das Leben ist wie ein Tennisball.
LG_157

ja,erstmal nur funktionieren.
Das mit dem Error hab ich auch,
in der Schule haben wir eine alte version von PortablePython(die man als zip runtergeladen hat,nicht als exe,die PortablePython dann entpackt)
bei der w9xpopen noch der Editor/Scripter ist den man ausführen muss.
das icon von w9xpopen sieht dort aus wie ne Kugel die so grau ist.
Ich suche schon die ganze Zeit nach dieser Version aber ich finde sie nicht.
Klassenkameraden sind nicht erreichbar.

Edit:
wenn man meine Datei hat,dann kann man sie einfach auf python.exe bzw pythonw.exe ziehen und der rechner kommt,ohne error oder abbruch.
es scheint also am neuen scripter zu klappern...

Edit2:
Rein theoretisch wie müsste ich denn das mit dem Plus,Minus,Gleich machen.
Einfahc mal posten,ich probiers dann aus...
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Ich habe mal ein kleines Beispiel für dich geschrieben. Einfach Wert eingeben auf + klicken neuen Wert eingeben, wieder auf + drücken, ...

Die anderen Zahlen und Operationen sind deine Aufgabe. Dazu musst du immer speichern, welche Operation gerade ausgewählt wurde.

Code: Alles auswählen

import Tkinter as tk

class Rechner(object):
    def __init__(self, root):
	self.anzeige = tk.Label(root, bg="#FFFFFF", bd=10, width=20,relief="sunken", anchor="e")
	self.anzeige.pack(side=tk.TOP)

	button = tk.Button(root, text="+", command=self.plus)
	button.pack(side=tk.RIGHT)
      
	button = tk.Button(root, text="2", command=lambda : self.zahl("2"))
	button.pack(side=tk.LEFT)

	button = tk.Button(root, text="3", command=lambda : self.zahl("3"))
	button.pack(side=tk.LEFT)

        self.eingabe = ""
        self.wert = 0

    def zahl(self, wert):
        self.eingabe += wert
        self.anzeige.configure(text=self.eingabe)

    def plus(self):
        self.wert = self.wert + int(self.eingabe)
	self.anzeige.configure(text=str(self.wert))
        self.eingabe = ""


root = tk.Tk()
Rechner(root)
root.mainloop()
Ich hoffe mal, dass du mit den Klassen nicht überfordert bist, aber mit "global" kann es nur eine schlechte Lösung werden.
Das Leben ist wie ein Tennisball.
LG_157

ne sry,
hab jetzt

def gleich():
anzeige.configure (text=str)

versucht,
er tut schonmal etwas und zwar ne andere Zahl ausgeben,nur leider ist das nicht das ergebnis...
Könnte mir das mal jmd machen,also
def gleich():


ausfüllen?aber mit global pls
MfG
Antworten