Tkinter Rückgabewert Funktion Checkbox

Fragen zu Tkinter.
Antworten
jaykobus
User
Beiträge: 1
Registriert: Samstag 28. Oktober 2017, 17:07

Hi,
ich arbeite mich gerade für meine Masterarbeit in Python und Tkinter ein. Nun habe ich folgendes Problem:

Ich öffne diese Funktion und erzeuge ein Fenster darin kann die Parameterwerte anpassen und die Checkbox anwählen.
Mein Problem ist, dass wenn ich die Funktion das erste Mal in Spyder aufrufe funktioniert alles wenn ich sie das zweite Mal durchlaufen lasse wird NUR der Wert der Checkbox nicht übergeben.

Ein zweites Problem ist, dass wenn ich anstatt master.quit master.destroy verwende ich ein Fehler bekomme
TclError: invalid command name ".140021423071960"

Kann mir jemand weiterhelfen?

Code: Alles auswählen

def EingabeParameter():
 
    master= Tk()
    master.title("Parameter Eingabe")
                 
    Bezeichnung = [["Starttemperatur t1" ,                  90             ],
                   ["c3 Berechnung Lambda",                 -77086.958      ],
                   ["amic Stoffwerte Kond.",                                 -0.15411        ], 
                   ["bmic Stoffwerte Kond.",                                 135.919193      ],
                   ["cmic Stoffwerte Kond.",                                 -20605.64       ],
                  
                   ["Zusätzliche Leistung",                        0         ]
                   ] 
    

    for i in range(len(Bezeichnung)):
    	Label(master, text=Bezeichnung[i][0],anchor = "w",justify=LEFT, width = 30 , height = 1).grid(row = r , column = c)
        Eintrag.append(Entry(master))
        Eintrag[i].grid(row=r, column = c+1)
        Eintrag[i].insert(0,Bezeichnung[i][1])
 
    
    Auswahl_Kennlinie = IntVar()
    Checkbutton(master, text="Soll die Verdichterkennlinie neu eingegeben werden?", variable=Auswahl_Kennlinie).grid(row=15, sticky=W)
    
        
    Button(master, text='Berechnen', command=master.quit).grid(row=(22), column = 0, sticky=W, pady=4)
     
    master.mainloop()

    return(Eintrag,Bezeichnung,Auswahl_Kennlinie)
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Statt mit len und range zu arbeiten besser gleich über die List iterieren. Und gleich noch auspacken:

Code: Alles auswählen

for bezeichnung, wert in Bezeichnung:
     ....
Das beachten von PEP8 zur Namensgebung in Python ist auch empfehlenswert.

Zum eigentlichen Problem: ich kenne spyder nicht, aber manchmal haben IDEs Auswirkungen auf GUI Skripte die man aus ihnen heraus startet. Versuch das mal über die Kommandozeile. Vielleicht gehts da besser.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@jaykobus: Dein Skript funktioniert nicht, wegen falscher Einrückung. Zu viele Leerzeilen und Leerzeichen machen das Programm auch schwer lesbar. Du hast ein schönes Beispiel, warum das optische Ausrichten von Klammern nicht funktioniert; sobald ein Zeichen sich ändert muß man alle anderen Zeilen anpassen. Wie in normalen Texten gilt: kein Leerzeichen vor und genau eines nach Kommas.

GUI-Programme arbeiten ereignisbasiert. Du versuchst hier den seriellen Ablauf eines ›normalen‹ Programms mit einer GUI zu kombinieren. Das wird nicht funktionieren. Während des gesamten Ablaufs darf es nur eine Tk-Instanz geben, die meist ganz am Anfang erzeugt wird. Normalerweise gibt es dann auch genau einen Aufruf von »mainloop«. Sobald der Mainloop verlassen wird, ist auch das Programm zu Ende. Daher kommt auch Dein Problem: nach einem Aufruf von »master.destroy« ist die gesamte GUI beendet. Es gibt also keine Auswahl mehr und keine Entry-Felder. Jeder Versuch, darauf zuzugreifen, gibt einen Fehler.
Antworten