Funktion im Button mit Parameter

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Tomax
User
Beiträge: 31
Registriert: Sonntag 21. August 2016, 08:05

Hallo Zusammen

Ich rufe mit einem Button eine Funktion auf, die verschiedene Berechnungen macht.
Ohne Parameterübergabe funktioniert alles wunderbar.

Code: Alles auswählen

b_anzeigen = tk.Button(hauptfenster, text="Kurve anzeigen", command=kurve_anzeigen)
DIe Funktion sieht so aus:

Code: Alles auswählen

def kurve_anzeigen():
    x = []
    x.append(x1.get())
    x.append(x2.get())
    x.append(x3.get())
    x.append(x4.get())
    x.append(x5.get())
    x.append(x6.get())
    x.append(x7.get())
    y0 = []
    y0.append(y1.get())
    y0.append(y2.get())
    y0.append(y3.get())
    y0.append(y4.get())
    y0.append(y5.get())
    y0.append(y6.get())
    y0.append(y7.get())
    y0s = []
    y0s.append(float(pa.get()) * float(x1.get())**2 + float(pb.get()) * float(x1.get()) + float(pc.get()))
    y0s.append(float(pa.get()) * float(x2.get())**2 + float(pb.get()) * float(x2.get()) + float(pc.get()))
    y0s.append(float(pa.get()) * float(x3.get())**2 + float(pb.get()) * float(x3.get()) + float(pc.get()))
    y0s.append(float(pa.get()) * float(x4.get())**2 + float(pb.get()) * float(x4.get()) + float(pc.get()))
    y0s.append(float(pa.get()) * float(x5.get())**2 + float(pb.get()) * float(x5.get()) + float(pc.get()))
    y0s.append(float(pa.get()) * float(x6.get())**2 + float(pb.get()) * float(x6.get()) + float(pc.get()))
    y0s.append(float(pa.get()) * float(x7.get())**2 + float(pb.get()) * float(x7.get()) + float(pc.get()))
Sobald ich in den Aufruf Klammern für Parameter einfüge, werden plötzlich die Berechnungen nicht mehr ausgeführt:

Code: Alles auswählen

b_anzeigen = tk.Button(hauptfenster, text="Kurve anzeigen", command=kurve_anzeigen())
Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "/home/thomas/PycharmProjects/Test/PumpPro.py", line 645, in <module>
    b_anzeigen = tk.Button(hauptfenster, text="Kurve anzeigen", command=kurve_anzeigen())
  File "/home/thomas/PycharmProjects/Test/PumpPro.py", line 37, in kurve_anzeigen
    y0s.append(float(pa.get()) * float(x1.get())**2 + float(pb.get()) * float(x1.get()) + float(pc.get()))
ValueError: could not convert string to float: 
Was ist hier passiert, was mache ich falsch?

Danke,
Thomas
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Tomax: Bei GUI-Programmierung, vor allem, wenn sie schon so eine Komplexität angenommen hat, wie bei Dir, kommt man eigentlich nicht um objektorientierte Programmierung drumrum. Die vielen Eingabefelder lassen sich nicht mehr sinnvoll alle als Parameter übergeben.
Wenn Du anfängst, Variablen durchzunummerieren, willst Du eigentlich Listen nehmen, also alle xi z.b. in eine Liste x_positions:

Code: Alles auswählen

def kurve_anzeigen(self):
    pa = float(pa.get())
    pb = float(pb.get())
    pc = float(pc.get())
    x_positions = [x.get() for x in self.x_positions]
    y_positions = [y.get() for y in self.y_positions]
    y0s = [pa * x**2 + pb * x + pc for x in x_positions]
dann kann man den kompletten Zustand im Objekt speichern und braucht meist keine zusätzlichen Parameter, die man sonst mit Hilfe von functools.partial übergeben müßte.
Antworten