Seite 1 von 1

mehrere Entrys auslesen mit selben Namen ?

Verfasst: Dienstag 11. Dezember 2018, 20:20
von Octarock
Hallo,

Ich habe in Python 3 ein Programm geschrieben, welches mit dem Simplex-Algorithmus lineare Gleichungen optimiert. Um die Eingabe handlicher zu gestalten, habe ich eine simples GUI mit TKinter erstellt.
Zu beginn öffnet sich ein Fenster, in welches man die Variablennamen definiert und die Anzahl der Nebenbedingungen. Somit weiß ich ja auch wie vielen und aus welchen Variablen die Nebenbedingung aufgebaut ist.
Beim Klicken auf weiter wird man nun zur Eingabe der Nebenbedingungen un der ZielFunktion weitergeleitet. (Wer mit den Simplexverfahren nix anfangen kann, kein Problem das Problem kommt noch, ich erkläre nur das alles um die Fragen zu vermeiden "Warum machst du es nicht anders?")
Nun habe ich also ein Fenster das dem entsprechend aufgebaut ist, was man beim ersten Fenster eingegeben hat (Wie viele NebenBedingungen, wie viele Werte pro NB / ZF definiert werden müssen)

Code: Alles auswählen

for i in range(Anzahl_NB):
    Label_Anweisung_NB = Label(Berechnen, text = str(i + 1) + ".NB: Werte der Variablen: ")
    Label_Anweisung_NB.grid(row = i, column = 0)
    for x in range(Anzahl_Variablen):
        Input_Werte_NB = Entry(Berechnen, bd=5, width=5)
        Input_Werte_NB.grid(row = i, column = 2*x + 1)
        Label_Name_Variable_NB = Label(Berechnen, text = Namen_Variablen[x])
        Label_Name_Variable_NB.grid(row = i, column = 2*x + 2)

Label_Anweisung_ZF = Label(Berechnen, text = "  ZF: Werte der Variablen")
Label_Anweisung_ZF.grid(row = i+1, column = 0)
for x in range(Anzahl_Variablen):
    Input_Werte_ZF = Entry(Berechnen, bd=5, width=5)
    Input_Werte_ZF.grid(row = i+1, column = 2*x + 1)
    Label_Name_Variable_ZF = Label(Berechnen, text = Namen_Variablen[x])
    Label_Name_Variable_ZF.grid(row = i+1, column = 2*x + 2)
    
Berechnen_Button = Button(Berechnen, text="Berechnen", command=berechnen_action)
Quit_Button = Button(Berechnen, text="Beenden", command=fenster.quit)
Berechnen_Button.grid(row = i+6, column = 0)
Quit_Button.grid(row = i+6, column = 1)
Da ist nun also ein Fenster, bei welchen alle Entrys der NB / ZF gleich heißen und wenn ich die dann auslesen will, weiß ich nicht, wie ich die alle und nicht nur das Letzte auslese.
(für den Simplex-Algorithmus muss ich alle Werte nach einander in einer Liste speichern)
Und ich kann denen ja keine jeweiligen Namen geben, da ich ja nicht weiß wie viele Variablen bei wie vielen NB. Ich hoffe, ihr könnt mir weiterhelfen bzw. ich stehe nur auf dem Schlauch :)
Freue mich über jede Hilfe.

PS: Wie kann man eigentlich den Text eines Labels erweitern?

Re: mehrere Entrys auslesen mit selben Namen ?

Verfasst: Dienstag 11. Dezember 2018, 21:05
von __blackjack__
@Octarock: Du suchst Listen. Einfach die Eingabe-Widgets in eine Liste stecken, dann kannst Du die später auch wieder alle auslesen, egal wie viele es sind. Halt in einer Schleife.

Zum PS: Man kann den alten Wert auslesen und darauf aufbauend einen erweiterten Wert erstellen und den wieder setzen.

Re: mehrere Entrys auslesen mit selben Namen ?

Verfasst: Dienstag 11. Dezember 2018, 22:10
von Octarock
cool aber wie macht man das? (bin ansoluter Tkinter noob)

Re: mehrere Entrys auslesen mit selben Namen ?

Verfasst: Dienstag 11. Dezember 2018, 22:23
von __deets__
Das hat doch nichts mit tkinter zu tun. Eine Liste ist eine Liste. Wenn die (numerische) Werte in einer Liste speichern kannst, wie du selbst sagst, kannst du das auch mit Entry-Objekten machen. Für Python und seine Listen ist das gleich. .

Re: mehrere Entrys auslesen mit selben Namen ?

Verfasst: Mittwoch 12. Dezember 2018, 21:18
von Octarock
Schon klar aber das Auslesen der Entrys erfolgt ja erst, wenn alle ausgefüllt sind und der Button betätigt wird. Wenn ich NAME_DES_ENTRY.get() sag, gibt er mir die Eingabe des letzten erzeugten Entrys mit den jeweiligen Namen, egal ob ich es in einer Schleife in eine Liste speichern lasse.
Also wenn ich hier etwas grundlegend falsch verstehe bitte noch mal anders erklären, aber ich glaube so lässt sich mein Problem nicht lösen bzw. das Problem wurde noch nicht richtig verstanden.

Re: mehrere Entrys auslesen mit selben Namen ?

Verfasst: Mittwoch 12. Dezember 2018, 22:27
von __blackjack__
@Octarock: Du sollst die Entry's in einer Liste speichern und dann später in einer Schleife über diese Liste mit Entry's gehen und auf jedem dieser Entry's aus der Liste die `get()`-Methode aufrufen. Dass das nur mit dem Namen den Du als Laufvariable beim erstellen aller Entry's nicht geht, sondern das man da natürlich nur den Wert vom letzten Entry bekommt das an diesen Namen gebunden wurde, sollte eigentlich sonnenklar sein. Das wäre schon arg magisch wenn da etwas anderes passieren würde. Vor allem *was* hätte denn da sonst anderes passieren sollen?

Re: mehrere Entrys auslesen mit selben Namen ?

Verfasst: Mittwoch 12. Dezember 2018, 22:55
von __deets__
Doch doch, wir haben das schon begriffen. Das sich das Problem nicht löst, indem man nichts anders macht, ist auch klar.

Also auf ein neues:

Code: Alles auswählen

alle_meine_entries = []
for ... :
     entry = Entry(....)
     alle_meine_entries.append(entry)

def button_command():
       for entry in alle_meine_entries:
               ... # ada guck, nicht nur das letzte