Problem mit Python
lima-city → Forum → Programmiersprachen → Python
ansatz
beispiel
berechnen
button
code
frage
funktion
groove
http
label
oberen label
paar
pack
punkt
relief
stimmen
text
url
verwenden
ziel
-
Hallo allerseits. Brauche Hilfe, da ich net weiterkomme.
Hoffe, es gibt hier ein Paar Python-Spezialisten.
Gehts um folgendes. Ich will ein "mini"-Formelsammlung mittels Python schreiben. Soweit sogut, doch nun bin ich auf ein Punkt gestoßen, wo ich net weiter komme.
import Tkinter def ende(): main.withdraw() # FUNKTIONEN def fma(F=0,m=0,a=0): F = float(F) # -> hier habe ich mit E1.get() versucht m = float(m) a = float(a) if m > 0 and a > 0: F=m*a print("F = %.2f N" % F) print("m = %.2f kg" % m) print("a = %.2f m/s^2" % a) return if F > 0 and a > 0: m=F/a print("F = %.2f N" % F) print("m = %.2f kg" % m) print("a = %.2f m/s^2" % a) return if F > 0 and m > 0: a=F/m print("F = %.2f N" % F) print("m = %.2f kg" % m) print("a = %.2f m/s^2" % a) return def fml(F=0,M=0,l=0): F = float(F) M = float(M) l = float(l) if M > 0 and l > 0: F=M*l print("F = %.2f N" % F) print("M = %.2f Nm" % M) print("l = %.2f m" % l) return if F > 0 and l > 0: M=F/l print("F = %.2f N" % F) print("M = %.2f Nm" % M) print("l = %.2f m" % l) return if F > 0 and M > 0: l=F/M print("F = %.2f N" % F) print("M = %.2f Nm" % M) print("l = %.2f m" % l) return def pfa(p=0,F=0,A=0): p = float(p) F = float(F) A = float(A) if p > 0 and F > 0: A=F/p print("p = %.2f Pa" % p) print("F = %.2f N" % F) print("A = %.2f m^2" % A) return if p > 0 and A > 0: F=p*A print("p = %.2f Pa" % p) print("F = %.2f N" % F) print("A = %.2f m^2" % A) return if F > 0 and A > 0: p=F/A print("p = %.2f Pa" % p) print("F = %.2f N" % F) print("A = %.2f m^2" % A) return # Hauptprogramm main = Tkinter.Tk() main.title("Formelsammlung") main.geometry("480x220") # FELDER/FRAMES #FrameAL mit Anzeige-Label frameal = Tkinter.Frame(main) frameal.pack(fill = Tkinter.X) labelal = Tkinter.Label(frameal, bg="#FFFFFF", bd=4, relief = "sunken", anchor="e") labelal.pack(fill = Tkinter.X, pady = 10) #FrameA framea = Tkinter.Frame(main) framea.pack(fill = Tkinter.X) #FrameB frameb = Tkinter.Frame(main) frameb.pack(fill = Tkinter.X) #FrameC framec = Tkinter.Frame(main) framec.pack(fill = Tkinter.X) #FrameD #framed = Tkinter.Frame(main) #framed.pack(fill = Tkinter.X) #FrameE #framee = Tkinter.Frame(main) #framee.pack(fill = Tkinter.X) #FrameF #framef = Tkinter.Frame(main) #framef.pack(fill = Tkinter.X) # LABELS #Label One label1 = Tkinter.Label(framea, text = "F = m*a") label1["font"] = "Courier 12 italic" label1["height"] = 2 label1["width"] = 15 label1["borderwidth"] = 4 label1["relief"] = "groove" label1["bg"] = "#FFFFFF" label1["fg"] = "#000000" label1["anchor"] = "w" label1.pack(side = Tkinter.LEFT) #Label 2 label2 = Tkinter.Label(framea, text = "M = F*l") label2["font"] = "Courier 12 italic" label2["height"] = 2 label2["width"] = 15 label2["borderwidth"] = 4 label2["relief"] = "groove" label2["bg"] = "#FFFFFF" label2["fg"] = "#000000" label2["anchor"] = "w" label2.pack(side = Tkinter.LEFT) #Label 3 label3 = Tkinter.Label(framea, text = "p = F/A") label3["font"] = "Courier 12 italic" label3["height"] = 2 label3["width"] = 15 label3["borderwidth"] = 4 label3["relief"] = "groove" label3["bg"] = "#FFFFFF" label3["fg"] = "#000000" label3["anchor"] = "w" label3.pack(side = Tkinter.LEFT) #ENTRYS/EINGABEN # Krafteingabe E1 = Tkinter.Entry(frameb, width = 5) E1.insert(0, 'F') E1.pack(side = Tkinter.LEFT) E2 = Tkinter.Entry(frameb, width = 4) E2.insert(0, 'm') E2.pack(side = Tkinter.LEFT) E3 = Tkinter.Entry(frameb, width = 4) E3.insert(0, 'a') E3.pack(side = Tkinter.LEFT) # Button1 b1 = Tkinter.Button(frameb, text = "Berechnen", activebackground = "yellow", command = fma) b1.pack(side = Tkinter.LEFT) # Dregmomeneingabe E4 = Tkinter.Entry(frameb, width = 5) E4.insert(0, 'M') E4.pack(side = Tkinter.LEFT) E5 = Tkinter.Entry(frameb, width = 4) E5.insert(0, 'F') E5.pack(side = Tkinter.LEFT) E6 = Tkinter.Entry(frameb, width = 4) E6.insert(0, 'l') E6.pack(side = Tkinter.LEFT) # Button1 b2 = Tkinter.Button(frameb, text = "Berechnen", activebackground = "yellow", command = fml) b2.pack(side = Tkinter.LEFT) # Druckneingabe E7 = Tkinter.Entry(frameb, width = 5) E7.insert(0, 'p') E7.pack(side = Tkinter.LEFT) E8 = Tkinter.Entry(frameb, width = 4) E8.insert(0, 'F') E8.pack(side = Tkinter.LEFT) E9 = Tkinter.Entry(frameb, width = 4) E9.insert(0, 'A') E9.pack(side = Tkinter.LEFT) # Button1 b3 = Tkinter.Button(frameb, text = "Berechnen", activebackground = "yellow", command = pfa) b3.pack(side = Tkinter.LEFT)
So sollte es aussehen: http://kozak.lima-city.de/sonstiges/Unbenannt-2.jpg
Bei Punkt 1. sollte man die Werte eingeben und wenn man auf Berechnen drücke, dan soll der Antwort im oberen Label (2.) erscheinen.
1.Frage:
Wie kann ich es machen, dass die Werte eingelesen und übernommen werden ( bei 1.)
Ich habe es mal mit .get() versucht. Problem: Die Werte werden dann zwar übernommen doch nicht in die Fkt. einbezogen.
2.Frage:
Was muss ich machen, damit das Ergebniss im oberen Label (bei 2.) erscheint? Da hebe ich leider keinen Ansatz.
Weiteres Problem: Ich darf Fkt. "class" und "self" nicht benutzen.
Hoffe es gibt hier paar Experten unter uns. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Also ich hab mal etwas nach tkinter gegoogelt und folgendes ist bei rausgekommen:
1. http://effbot.org/tkinterbook/button.htm
Wenn du auf den Button klickst wird die Callback aufgerufen.
Dabei werden keinerlei Argumente übergeben, da der Button garnicht weiß, was du übergeben haben möchtest.
Damit ergibt sich zum Beispiel für deine Callbackfunktion fma, dass die Daten in der Funktion selbst ausgelesen werden müssen.
Dazu müssen in der Funktion die Entrys bekannt sein über die eingegeben wird. Das erreichst du über globale Variablen (schlechter Stil) oder über Klassen, die du ja nicht verwenden möchtest. Also ich setzt jetzt mal vorraus, dass du die Entrys E1, E2 und E3 als Global definiert hast und dann in der Funktion darauf zugreifen kannst:
def fml(): F = float(E1.get()) m = float(E2.get()) a = float(E3.get()) #hier kommt dann das gleiche wie vorher
2.
Am besten schreibst du eine Funktion, die nur das erstetzen des Textes in 2 übernimmt.
Die bekommt den neuen Text übergeben und muss natürlich das Ziel kennen. Das bedeutet wiederum eine globale Variable mehr nämlich das Zielfeld für das Ergebnis. Da ich es bei Oberflächlicher suche nicht ausmachen konnte nenne ich es erstmal Ziel und nehme an, dass es ein Entry(http://effbot.org/tkinterbook/entry.htm) ist, sollte es sich doch um ein Label (http://effbot.org/tkinterbook/label.htm) handeln, dann hilft die Funktion set(Text) weiter.
def setze_ergebnis(erg): Ziel.delete(0, END) Ziel.insert(0, erg)
Ich denke das sollte so stimmen. Ich hafte nicht für Fehler -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage