Python Startwert Variable

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
Nobbe4
User
Beiträge: 2
Registriert: Freitag 3. April 2020, 13:31

Hallo zusammen,
auch ich bin ein Newbie in Python und beisse mir gerade an einem Problem die Zähne aus.
Ich habe eine GUI auf Tkinter erstellt und schon einige Zeilen Grundcode erstellt. Das läuft soweit auch ganz gut...ABER...
ich möchte einen Startwert in eine Variable setzen und diese ariable dann weiterver- un bearbeiten d.h. im Detail:
- es geht um eine Temperaturregelung
- die eigentliche Temp.regelung habe ich noch nicht erstellt, die fehlt noch (kommt später)
- wenn die Steuerung das erstmal hochläuft, beim ersten Einsatz oder nach einem Stromausfall o.ä., möchte ich einen Startwert für die Solltemp. haben z.B. 50°C. Also einen Defaultwert
- wenn ich diesen Defaultwert im Programm fest hinterlege, kann ich diese Variable nicht mehr ändern, weil wegen der GUI ja das Programm immer wieder durchlaufen wird (mainloop).
- ich hängt da völlig fest, kann ja aber nicht sein, dass das nicht geht. Ich vermute mal, ich bin auf dem völlig falschen Dampfer unterwegs und würde mich über einen Stups in die richtige Richtung echt freuen :)
- es geht dabei eigentlich "nur" um die Codezeilen zwischen 42 + 58.
- der Istwert in der GUI ist zweckentfremdet, um mir anzeigenn zu lassen, ob sich der Wert der Variable st1 ändert, um es zur Istwertregelung zu verwenden

Ich sage schonmal vielen Dank.

Anbei der bisherige Code

Code: Alles auswählen

from tkinter import * # Import der Graphischen Bibliotek


#===================================================================================
# Hauptfenster
#===================================================================================
root = Tk() # Fenster erstellen
root.geometry("320x240")  # Fenstergröße - geometry("breitexhoehe+x+y")
root.wm_title("Tassenwärmer") # Fenster Titel
root.iconbitmap(r"D:\Eigene Dateien NWA\Download\Joy-It\Icons\open_icon_library-win-0.11\Grey-Dot_16x16.ico") # Eigenes Icon im Hauptfenster
root.config(background = 'black') # Hintergrundfarbe des Fensters


#===================================================================================
# Hier kommen die Elemente hin
#===================================================================================

#========================
# Bilder
#========================

# Definition Bilder
B1 = PhotoImage(file=r"D:\Eigene Dateien NWA\Download\Joy-It\Icons\Ein-Aus64x69.png")
B2 = PhotoImage(file=r"D:\Eigene Dateien NWA\Download\Joy-It\Icons\Auto Ein-Aus64x69 V4.png")
B3 = PhotoImage(file=r"D:\Eigene Dateien NWA\Download\Joy-It\Icons\Plus_64x69.png")
B4 = PhotoImage(file=r"D:\Eigene Dateien NWA\Download\Joy-It\Icons\Minus_64x69.png")
B5 = PhotoImage(file=r"D:\Eigene Dateien NWA\Download\Joy-It\Icons\Light_Gray_OFF_64x64.png")
B6 = PhotoImage(file=r"D:\Eigene Dateien NWA\Download\Joy-It\Icons\Light_Blue_ON_64x64.png")

#========================
# Variablen und Verarbeitug
#========================

# Variablen
# --- st1 -> Solltemperatur 1
# --- it1 -> Isttemperatur 1


#========================
# Sollwert
#========================

st1 = 50
    
def button_increase():
    global st1
    if st1 < 60:
        st1 += 1
    label_Soll.config(text=str(st1))



def button_decrease():
    global st1
    if 40 < st1:
        st1 -= 1
    label_Soll.config(text=str(st1))



#========================
# Label
#========================

label_Soll = Label(root, text=str(st1), fg='black', bg='lightgray', font=('Arial', 36))
label_Soll.place(x=153, y=96, width=138, height=54)

label_Soll2 = Label(root, text="Sollwert", fg='black', bg='lightgray', font=('Arial', 10))
label_Soll2.place(x=153, y=80, width=138, height=15)

label_Ist = Label(root, text=str(st1) fg='black', bg='gray', font=('Arial', 36))
label_Ist.place(x=153, y=176, width=138, height=54)

label_Ist2 = Label(root, text="Istwert", fg='black', bg='gray', font=('Arial', 10))
label_Ist2.place(x=153, y=160, width=138, height=15)

#========================
# Schaltflächen
#========================
  
button_1=Button(root)
button_1.place(x=5, y=5, width=64, height=69)
button_1.config(bd=0, relief=FLAT, image=B1, command = root.destroy)

button_2=Button(root)
button_2.place(x=79, y=5, width=64, height=69)
button_2.config(bd=0, relief=FLAT, image=B2, command = root.destroy)

button_3=Button(root)
button_3.place(x=153, y=5, width=64, height=69)
button_3.config(bd=0, relief=FLAT, image=B3, command = button_increase)

button_4=Button(root)
button_4.place(x=227, y=5, width=64, height=69)
button_4.config(bd=0, relief=FLAT, image=B4, command = button_decrease)


#===================================================================================
# Befehle, die zwingend am Ende stehen müssen
#===================================================================================

root.mainloop()
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Kannst dich ja mit dem Kollegen hier zusammentun: viewtopic.php?f=31&t=48120

Und die darin gegebenen Antworten (zur GUI-Programmierung) greifen natuerlich auch hier. Im TKinter-Unterforum suchen, suchen, suchen.
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Hier erstmal das, was alle Anfänger mit Tkinter zu hören bekommen: keine *-Importe, alles auf oberster Ebene außer Funktionsdefinitionen und Konstanten muß in eine Funktion wandern, die main heißt. Benutze keine globalen Variablen. Für jedes nicht-triviale GUI-Programm braucht man Klassendefinitionen.
Benutze kein place, weil das bei unterschiedlichen Systemen mit unterschiedlichen Auflösungen unterschiedlich Scheiße aussieht.

Benutzt keine Abkürzungen, st1? Was soll die 1? Warum nicht soll_temperatur? Dann muß man die Variablen auch nicht in einem Kommentar erklären.
Nobbe4
User
Beiträge: 2
Registriert: Freitag 3. April 2020, 13:31

@__deets__: Diesen Thread habe ich auch gesehen, aber ehrlich gesagt, nicht wirklich verstanden. Werde ich ihn mir wohl mit einem offeneren Geist nochmal zu Gemüte führen ;-)

@Sirius3:
*-Importe: ich habe die letzten zwei Wochen viel über Python gelesen (natürlich noch nicht alles verstanden), aber in einigen Tutorials und Anleitungen war expliziet *-Import als gängig beschrieben. Gut, nur weils im Internet steht, heißt es noch nicht, dass es so ist. Ich werde mich auch diesem Punkt annehmen und korrigieren.

alles auf der obersten Ebene: ich taste mich so langsam ran, an die Klassen usw.. Ich habe mir fest vorgenommen, in der finalen Version, einen "sauberen" Code zu haben

Globale Variablen: dieser Punkt wird durch die Bank weg als "Teufelszeug" gebrandmarkt, in sofern hast du hier völlig Recht.

Place: Ich habe für dieses Projekt ein spezifisches Display rausgesucht, daher die fixe Plazierung der Elemente. Auf lange Sicht gesehen, sollte man aber den Code so flexibel als möglich halten, somit hast du auch hier Recht.

st1: ich hatte schon zig mal, den langen Namen. Da ich aber gefühlte 1000 Varianten durchprobiert habe, habe ich mich zu diesen Var.namen hinreissen lassen. im finalen Code wollte ich das dann entsprechen auch nicht mehr haben.

Mit anderen Worten, ich habe noch viel Arbeit vor mir ;-)
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Nobbe4: Auch bei einer festen Displaygrösse hat `place()` Nachteile. Es macht unnötig mehr Arbeit wenn man da etwas ändert und in der Folge dann auch andere davon betroffene Elemente manuell anpassen muss, beispielsweise weil sich alles nach oder unter einem Anzeigeelement verschiebt.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten