Verkürzen, aber wie?

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
Programmer
User
Beiträge: 16
Registriert: Samstag 4. Oktober 2014, 19:36

Also ich habe ihr ein Code Stück aus meinem Programm:

Code: Alles auswählen

    SM1 = M1.get()
    SM2 = M2.get()
    SM3 = M3.get()
    SM4 = M4.get()
    SM5 = M5.get()
    SM6 = M6.get()

    SD1 = D1.get()
    SD2 = D2.get()
    SD3 = D3.get()
    SD4 = D4.get()
    SD5 = D5.get()
    SD6 = D6.get()
Und ich würde dies weil ich das öfters habe gerne verkürzen , habe schon alles mögliche versucht mit funktionen allerdings hänge ich immer an irgendwas fest. :)

Dies M1 bis M6 und D1 bis D6 sind alles Entrys von Tkinter.

MFG
Programmer
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Das Problem hier ist nicht dein Code, der ist einfach nur die logische Folge deiner Datenstrukturen. Letztere sind dein Problem. In diesem Fall solltest du überall da wo du Namen durchnummeriert hast, eine Liste verwenden. Sobald du das getan hast, wirst du sehen wie sich der gezeigte Code ganz natürlich auf zwei Zeilen schrumpft.
Programmer
User
Beiträge: 16
Registriert: Samstag 4. Oktober 2014, 19:36

Code: Alles auswählen

    for M in ["M1","M2","M3","M4","M5","M6"]:
        Variable = M.get()
        s = open("save.ini","w")
        s.write(Variable)
        s.close()
Ich glaube ich bin zu dumm um das zu verstehen gerade sry.
Es erscheint folgende fehlermeldung:

Code: Alles auswählen

    Variable = M.get()
AttributeError: 'str' object has no attribute 'get'
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@Programmer: irgendwo definierst ja M1 bis M6 und anstatt dass Du dort 6 verschiedene Variablen nimmst, steckst Du alle 6 Entries in eine Liste.
Programmer
User
Beiträge: 16
Registriert: Samstag 4. Oktober 2014, 19:36

Code: Alles auswählen

Woche = [M1,M2,M3,M4,M5,M6,D1,D2,D3,D4,D5,D6,MI1,MI2,MI3,MI4,MI5,MI6,DO1,DO2,DO3,DO4,DO5,DO6,F1,F2,F3,F4,F5,F6]
    s = open("save.ini","w")
    s.close()
    for T in Woche:
        Variable = T.get()
        s = open("save.ini","a")
        s.write(Variable + "\n")
        s.close()
Ich hoffe mal das ihr das so meintet , aufjedenfall funktioniert es so wie ich es will und habe nicht mehr soviel code zeilen stehen , Danke euch :)
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@Programmer: nochmal, Du sollst gleich beim erstellen Deiner Eingabefelder Listen benutzen. Und wie kommt man auf die Idee, für jede einzelne Variable immer wieder die gleiche Datei nochmal zu öffnen?
Programmer
User
Beiträge: 16
Registriert: Samstag 4. Oktober 2014, 19:36

Das mit dem öffnen der Datei habe ich ebend geändert so das er es vor der schleife öffnet und danach schließt , aber ich verstehe nicht was sie meinen damit direkt beim erstellen mit Listen zu arbeiten, haben sie evt. ein beispiel?
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Programmer hat geschrieben:Das mit dem öffnen der Datei habe ich ebend geändert so das er es vor der schleife öffnet und danach schließt , aber ich verstehe nicht was sie meinen damit direkt beim erstellen mit Listen zu arbeiten, haben sie evt. ein beispiel?
Irgendwo in deinem Code muss eine Stelle sein in der du M1 (usw.) definierst. Also ein M1 = ...

Dort an der Stelle musst du den Wert einer Liste zufügen. Und bitte gib der Liste einen sinnvollen Namen. s, M1, SM2 und T sind in der Regel keine sinnvollen Namen.
Programmer
User
Beiträge: 16
Registriert: Samstag 4. Oktober 2014, 19:36

Okay habs jetzt endlich geschafft , danke euch :)
bfm
User
Beiträge: 88
Registriert: Donnerstag 14. März 2013, 09:42

hier ein Link, wo die Sache auch noch mal beschrieben wird:
http://stackoverflow.com/questions/1760 ... in-tkinter

Letztendlich werden die Entry-Objekte und die StringVar selbst in eine Liste geschrieben. Über die Liste kann man dann wiederum auf die einzelnen Objekte zugreifen. Listen können nicht nur Werte wie 1, 2, 3 oder A, B, C aufnehmen sondern auch Objekte wie Entrys, Labels usw.
Antworten