Frage zum zeichnen einer Linie mit Hilfe eines Reglers

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
nil-le
User
Beiträge: 5
Registriert: Montag 16. November 2015, 11:13

Hallo, wir sitzen gerade an unserer Hausarbeit für Informatik.
Das Programm besteht aus einer Zeichnung eines für den Baubereich bestimmten Zweischaligen Mauerwerkes.
Bild

Danach sollen wie schon auf dem Bild zu sehen ist verschiedene Dicken angegeben werden sowie ein Endwert ermittelt werden.
Im Anschluss möchten wir noch einen Regler einfügen.

Code: Alles auswählen

#Button Berechnen
buttonBerechnen=Button(text="Berechnen U-Wert",command=BerechnenLuftschicht)
buttonBerechnen.grid(row=22,column=2,sticky="we")
#Ausgabe U-wert
LU = Label()
LU.grid(row=22,column=1,sticky="we",)
#Leerzeile
Label(T,text="").grid(row=23,column=0,sticky="w")
def schieben():
    float(eval(Te.get(self)))
          
#Temperaturregler innen
Label(T,text = "Temperatur innen (Ti)").grid(row =24, column=0, sticky ="we")
Ti= Scale(T,from_=5,to=30,width=20,orient="horizontal",)
Ti.grid(row = 24,column=1,sticky="we")
#Temperaturregler extern
Label(T,text = "Temperatur extern (Te)").grid(row =25, column=0, sticky ="we")
Te= Scale(T,from_=-20,to=40,width=20,orient="horizontal",command=schieben)
Te.grid(row = 25,column=1,sticky="we")


C.create_line(30,150-Te.get(),70,150,230,150,270,150-Ti.get(),width=2,fill="red",)
T.mainloop()
Der Regler ist soweit eingebaut jedoch verändert sich die oben im Bild zu sehende Rote Linie nicht.
Der Anfangspunkt der Linie verändert sich also somit beim verschieben der Skala(Regler) nicht.

Kann uns jemand helfen?
:K
Zuletzt geändert von Anonymous am Sonntag 3. Januar 2016, 18:24, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

@nil-le: Warum sollte sich die Linie auch verändern? In der Funktion steht nichts was das irgendwie *machen* würde.

Allerdings steht da einiges was ziemlich unschön ist. Angefangen bei dem `eval()`. Bitte sofort vergessen das es `eval()` gibt, das ist genau wie ``global`` in aller Regel ein Zeichen das man etwas falsch macht. Dann die Namen — `LU`, `Ti`, `Te`, `T`, oder `C` entsprechen in der Schreibweise nicht nur nicht dem Style Guide for Python Code, sondern sind zusätzlich auch sehr schlechte Namen. Ein Name soll dem Leser vermitteln was für eine Bedeutung der Wert im Programm hat, und nicht zum Rätselraten zwingen.

Wo kommt das `self` her und welche Dokumentation hat euch auf die Idee gebracht das die `get()`-Methode überhaupt ein Argument erwartet? Das zusammen mit dem `eval()` sieht mir sehr nach raten aus. So funktioniert programmieren nicht.

Wenn ich mir die `row`-Werte in diesem Quelltext anschaue, dann würde ich sagen ihr packt da zu viel in das `grid()`. Stell Dir mal die Arbeit vor die es machen würde wenn man oben noch ein Widget einfügen möchte, in wie vielen Programmzeilen man dann den `row`-Wert bei `grid()`-Aufrufen anpassen müsste. Programmieren besteht aus einen wesentlichen Teil darin Probleme in kleinere Teilprobleme aufzuteilen und die dann wenn sie klein genug sind, durch ein paar Zeilen Quelltext zu lösen, um dann die Teillösungen zu grösseren Teillösungen zusammenzusetzen. Das Prinzip sollte man auch auf die GUI anwenden. Zerlegt die in Teile und eigene Objekte. Zum Beispiel die Zeichnung mit der Linie kann man prima in ein eigenes Objekt kapseln das als veränderbaren Zustand diese rote Linie hat und eine oder mehrere Methoden besitzt die Linie zu verändern. Intern müsste man sich dazu das `Canvas`-Exemplar und die ID der Linie speichern um die nachher über diese ID mit `Canvas.coords()` verändern zu können.
Antworten