tkinter layout anordung

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.
fox1203
User
Beiträge: 56
Registriert: Montag 23. März 2020, 15:19

Hallo Zusammen,

bin gerade an einem neuen Projekt dran, möchte mir eine GUI mit tkinter zusammenstellen wo man Werte einerseits eintragen, als auch mittels +- button verändern kann. Habe dazu in der Suche schon einiges an Hilfestellungen gefunden, jedoch hänge ich jetzt. Das Layout sollte wie folgt aussehen:

"Bezeichnung" "Eingabewert" "- button" "+button"
"Bezeichnung" "Eingabewert" "- button" "+button"
"Bezeichnung" "Eingabewert" "- button" "+button"
....

Habe es zuerst mit folgendem Code probiert:

Code: Alles auswählen

#!/usr/bin/env python3
import tkinter as tk

class density_dry(tk.Frame):
    def __init__(self, parent):
        super().__init__(parent)
        self.value = tk.IntVar(value=1600)
        
        tk.Label(text="density_dry", width=10).pack(side=tk.LEFT)
        tk.Entry(self, textvariable=self.value).pack(side=tk.LEFT)
        tk.Button(self, text='-', command=self.decrease).pack(side=tk.LEFT)
        tk.Button(self, text='+', command=self.increase).pack(side=tk.LEFT)
        
    def increase(self):       
        self.value.set(self.value.get() + 50)
        
        
    def decrease(self):       
        self.value.set(self.value.get() - 50)
       
 
class saturation(tk.Frame):
    def __init__(self, parent):
        super().__init__(parent)
        self.value = tk.DoubleVar(value=0.25)
        
        tk.Label(text="saturation", width=10).pack(side=tk.LEFT)
        tk.Entry(self, textvariable=self.value).pack(side=tk.LEFT)
        tk.Button(self, text='-', command=self.decrease).pack(side=tk.LEFT)
        tk.Button(self, text='+', command=self.increase).pack(side=tk.LEFT)
        
    def increase(self):       
        self.value.set(round(self.value.get() + float(0.25), 2))
        
        
    def decrease(self):       
        self.value.set(round(self.value.get() - float(0.25), 2))

 
class diameter(tk.Frame):
    def __init__(self, parent):
        super().__init__(parent)
        self.value = tk.DoubleVar(value=1.0)
        
        tk.Label(text="diameter", width=10).pack(side=tk.LEFT)
        tk.Entry(self, textvariable=self.value).pack(side=tk.LEFT)
        tk.Button(self, text='-', command=self.decrease).pack(side=tk.LEFT)
        tk.Button(self, text='+', command=self.increase).pack(side=tk.LEFT)
        
    def increase(self):       
        self.value.set(round(self.value.get() + float(0.1), 2))
        
        
    def decrease(self):       
        self.value.set(round(self.value.get() - float(0.1), 2))


class cement_content(tk.Frame):
    def __init__(self, parent):
        super().__init__(parent)
        self.value = tk.IntVar(value=300)
        
        tk.Label(text="cement_content", width=20).pack(side=tk.LEFT)
        tk.Entry(self, textvariable=self.value).pack(side=tk.LEFT)
        tk.Button(self, text='-', command=self.decrease).pack(side=tk.LEFT)
        tk.Button(self, text='+', command=self.increase).pack(side=tk.LEFT)
        
    def increase(self):       
        self.value.set(self.value.get() + 10)
        
        
    def decrease(self):       
        self.value.set(self.value.get() - 10)
        
        
class start_temp(tk.Frame):
    def __init__(self, parent):
        super().__init__(parent)
        self.value = tk.IntVar(value=25)
        
        tk.Label(text="start_temp", width=10).pack(side=tk.LEFT)
        tk.Entry(self, textvariable=self.value).pack(side=tk.LEFT)
        tk.Button(self, text='-', command=self.decrease).pack(side=tk.LEFT)
        tk.Button(self, text='+', command=self.increase).pack(side=tk.LEFT)
        
    def increase(self):       
        self.value.set(self.value.get() + 1)
        
        
    def decrease(self):       
        self.value.set(self.value.get() - 1)
  
        
class einbau(tk.Frame):
    def __init__(self, parent):
        super().__init__(parent)
        self.value = tk.DoubleVar(value=0)
        
        tk.Label(text="einbau", width=10).pack(side=tk.LEFT)
        tk.Entry(self, textvariable=self.value).pack(side=tk.LEFT)
        tk.Button(self, text='-', command=self.decrease).pack(side=tk.LEFT)
        tk.Button(self, text='+', command=self.increase).pack(side=tk.LEFT)
        
    def increase(self):       
        self.value.set(round(self.value.get() + float(0.5), 1))
        
        
    def decrease(self):       
        self.value.set(round(self.value.get() - float(0.5), 1))
     
def main():
    root = tk.Tk()
    frame = density_dry(root)
    frame.pack()
    frame = saturation(root)
    frame.pack()
    frame = diameter(root)
    frame.pack()
    frame = cement_content(root)
    frame.pack()
    frame = start_temp(root)
    frame.pack()
    frame = einbau(root)
    frame.pack()
    
    
    
    
    root.mainloop()
    
if __name__ == '__main__':
    main()
Da habe ich mir gedacht, dass in der "class" Ebene die einzelnen Widgets nebeneinander angeführt werden, und anschließend diese Widget Packete im Bereich "def main():" untereinander dargestellt werden. Da dies nicht den erwünschten Erfolg zeigte, da die Widgets in einer Art Kurve angeordnet werden.

Dannach probierte ich es mit grid(), sieht nun so aus:

Code: Alles auswählen

#!/usr/bin/env python3
import tkinter as tk

class density_dry(tk.Frame):
    def __init__(self, parent):
        super().__init__(parent)
        self.value = tk.IntVar(value=1600)
        
        tk.Label(text="density_dry", width=10).grid(column=0, row=0)
        tk.Entry(self, textvariable=self.value).grid(column=1, row=0)
        tk.Button(self, text='-', command=self.decrease).grid(column=2, row=0)
        tk.Button(self, text='+', command=self.increase).grid(column=3, row=0)
        
    def increase(self):       
        self.value.set(self.value.get() + 50)
        
        
    def decrease(self):       
        self.value.set(self.value.get() - 50)
       
 
class saturation(tk.Frame):
    def __init__(self, parent):
        super().__init__(parent)
        self.value = tk.DoubleVar(value=0.25)
        
        tk.Label(text="saturation", width=10).grid(column=0, row=1)
        tk.Entry(self, textvariable=self.value).grid(column=1, row=1)
        tk.Button(self, text='-', command=self.decrease).grid(column=2, row=1)
        tk.Button(self, text='+', command=self.increase).grid(column=3, row=1)
        
    def increase(self):       
        self.value.set(round(self.value.get() + float(0.25), 2))
        
        
    def decrease(self):       
        self.value.set(round(self.value.get() - float(0.25), 2))

 
class diameter(tk.Frame):
    def __init__(self, parent):
        super().__init__(parent)
        self.value = tk.DoubleVar(value=1.0)
        
        tk.Label(text="diameter", width=10).grid(column=0, row=3)
        tk.Entry(self, textvariable=self.value).grid(column=1, row=3)
        tk.Button(self, text='-', command=self.decrease).grid(column=2, row=3)
        tk.Button(self, text='+', command=self.increase).grid(column=3, row=3)
        
    def increase(self):       
        self.value.set(round(self.value.get() + float(0.1), 2))
        
        
    def decrease(self):       
        self.value.set(round(self.value.get() - float(0.1), 2))


class cement_content(tk.Frame):
    def __init__(self, parent):
        super().__init__(parent)
        self.value = tk.IntVar(value=300)
        
        tk.Label(text="cement_content", width=10).grid(column=0, row=4)
        tk.Entry(self, textvariable=self.value).grid(column=1, row=4)
        tk.Button(self, text='-', command=self.decrease).grid(column=2, row=4)
        tk.Button(self, text='+', command=self.increase).grid(column=3, row=4)
        
    def increase(self):       
        self.value.set(self.value.get() + 10)
        
        
    def decrease(self):       
        self.value.set(self.value.get() - 10)
        
        
class start_temp(tk.Frame):
    def __init__(self, parent):
        super().__init__(parent)
        self.value = tk.IntVar(value=25)
        
        tk.Label(text="start_temp", width=10).grid(column=0, row=4)
        tk.Entry(self, textvariable=self.value).grid(column=1, row=4)
        tk.Button(self, text='-', command=self.decrease).grid(column=2, row=4)
        tk.Button(self, text='+', command=self.increase).grid(column=3, row=4)
        
    def increase(self):       
        self.value.set(self.value.get() + 1)
        
        
    def decrease(self):       
        self.value.set(self.value.get() - 1)
  
        
class einbau(tk.Frame):
    def __init__(self, parent):
        super().__init__(parent)
        self.value = tk.DoubleVar(value=0)
        
        tk.Label(text="einbau", width=10).grid(column=0, row=5)
        tk.Entry(self, textvariable=self.value).grid(column=1, row=5)
        tk.Button(self, text='-', command=self.decrease).grid(column=2, row=5)
        tk.Button(self, text='+', command=self.increase).grid(column=3, row=5)
        
    def increase(self):       
        self.value.set(round(self.value.get() + float(0.5), 1))
        
        
    def decrease(self):       
        self.value.set(round(self.value.get() - float(0.5), 1))
     
def main():
    root = tk.Tk()
    frame = density_dry(root)
    frame.grid(row=0)
    frame = saturation(root)
    frame.grid(row=1)
    frame = diameter(root)
    frame.grid(row=2)
    frame = cement_content(root)
    frame.grid(row=3)
    frame = start_temp(root)
    frame.grid(row=4)
    frame = einbau(root)
    frame.grid(row=5)
    
    
    
    
    root.mainloop()
    
if __name__ == '__main__':
    main()
Ist nun leider auch nicht das, was ich mir vorgestellt hatte. Kann mir da jemand einen Gedankenanstoß geben??

Danke im Vorraus
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Die ganzen Klassen sind identisch und können zu einer Zusammengefasst werden. Da jede einen eigenen Frame darstellt, sind die einzelnen Zeilen nicht miteinander aligned. Du mußt alles in ein Grid ohne Frames packen.
Klassen werden mit Großem Anfangsbuchstaben geschrieben.
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Also so:

Code: Alles auswählen

#!/usr/bin/env python3
import tkinter as tk

class SpinInput:
    def __init__(self, parent, row, text, vartype, initial_value, step):
        self.value = vartype(value=initial_value)
        self.step = step
        tk.Label(parent, text=text, width=10).grid(column=0, row=row)
        tk.Entry(parent, textvariable=self.value).grid(column=1, row=row)
        tk.Button(parent, text='-', command=self.decrease).grid(column=2, row=row)
        tk.Button(parent, text='+', command=self.increase).grid(column=3, row=row)
        
    def increase(self):       
        self.value.set(round(self.value.get() + self.step, 5))
        
    def decrease(self):       
        self.value.set(round(self.value.get() - self.step, 5))
       
     
def main():
    root = tk.Tk()
    density_dry = SpinInput(root, 1, "density_dry", tk.IntVar, 1600, 50)
    saturation = SpinInput(root, 2, "saturation", tk.DoubleVar, 0.25, 0.25)
    diameter = SpinInput(root, 3, "diameter", tk.DoubleVar, 1.0, 0.1)
    cement_content = SpinInput(root, 4, "cement_content", tk.IntVar, 300, 10)
    start_temp = SpinInput(root, 5, "start_temp", tk.IntVar, 25, 1)
    einbau = SpinInput(root, 6, "einbau", tk.DoubleVar, 0, 0.5)
    root.mainloop()
    
if __name__ == '__main__':
    main()
fox1203
User
Beiträge: 56
Registriert: Montag 23. März 2020, 15:19

perfekt, danke, das ist genau das was ich wollte, kann man nun auch easy um weitere buttons erweitern.

Jetzt stellt sich dann noch eine weitere Frage:
Die aktuellen Werte in tk.Entry würde ich nun mit .get() abfragen und in ein TXT schreiben wollen. Jedoch bin ich mir da nicht sicher an welcher Stelle ich dies im Code am Besten abbilden kann. Das TXT File sollte sich immer nach Änderung des Wertes ebenfalls mit "w" ändern. Direkt im Anschluss möchte ich dann ein Programm laufen lassen "binär file". Dessen Output, ebenfalls in TXT soll wieder eingelesen werden und die Werte im GUI als Kurve dargestellt werden.

Kannst du mir da mögliche Schritte aufzeigen, da ich für dieser Vorgang die meisten GUI Tutorials weit übersteigt :)

Danke
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Ich verstehe nicht was Du mit `sollte sich mit "w" ändern` meinst. Man kann mit DoubleVar.trace auf die Änderung des Inhalts reagieren. Was Du direkt im Anschluß machst, ist doch für dieses Programm egal.
fox1203
User
Beiträge: 56
Registriert: Montag 23. März 2020, 15:19

da meinte ich das "w" für zB file=open("mega.txt", "w")

Aber die Sache mit dem DoubleVar.trace habe ich noch nicht ganz verstanden. Es müsste ja möglich sein den jeweilig aktuellen Wert aus der GUI in ein TXT File zu schreiben und anschließend weitere Befehle auszuführen. wird das nicht im normal mit get() realisiert?
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Du hast nicht nach dem "wie" sondern nach dem "wo" gefragt.
fox1203
User
Beiträge: 56
Registriert: Montag 23. März 2020, 15:19

was meinst du?
fox1203
User
Beiträge: 56
Registriert: Montag 23. März 2020, 15:19

wenn ich einen Befehl schreibe zum TXT file schreiben, dann erhalte ich nur quatsch im TXT file:

Code: Alles auswählen

def main():
    root = tk.Tk()
    root.title("Test GUI")
    root.geometry("800x800")
    density_dry = SpinInput(root, 1, "density_dry", tk.IntVar, 1600, 50)
    with open ("input.txt", "w") as file:
        file.write(str(density_dry))
im file steht dann:
<__main__.SpinInput object at 0x7f2b5573be80>

anstelle des wertes an sich.

Wie löst man das?
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Na in dem man nicht das Widget-Objekt in eine Zeichenkette umwandelt, das macht ja auch gar keinen Sinn, sondern von dem Objekt den Wert abfragt. Also vom `value`-Attribut mit `get()`.

Wobei es natürlich unsinnig ist das direkt nach dem erstellen des Widgets zu tun, weil der Benutzer an der Stelle ja noch gar keine Möglichkeit hatte da etwas einzutragen/zu verändern.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
fox1203
User
Beiträge: 56
Registriert: Montag 23. März 2020, 15:19

na bitte dann war ja der Gedanke mit get() ja eh richtig, die Frage bleibt allerdings wie und wo ich zB den aktuellen Wert des von zB denisty_dry in ein TXT file schreiben kann:

Code: Alles auswählen

#!/usr/bin/env python3
import tkinter as tk

class SpinInput:
    def __init__(self, parent, row, text, vartype, initial_value, step):
        self.value = vartype(value=initial_value)
        self.step = step
        tk.Label(parent, text=text, width=15).grid(column=0, row=row)
        tk.Entry(parent, textvariable=self.value, width=5).grid(column=1, row=row)
        tk.Button(parent, text='-', command=self.decrease).grid(column=2, row=row)
        tk.Button(parent, text='+', command=self.increase).grid(column=3, row=row)
        
    def increase(self):       
        self.value.set(round(self.value.get() + self.step, 2))
        
    def decrease(self):       
        self.value.set(round(self.value.get() - self.step, 2))
        
    def write(self):
        self.value = vartype(value=initial_value)
        file = open ("input.txt", "w")
        file.write (str(self.value))
        file.close()
        
 
     
def main():
    root = tk.Tk()
    root.title("Test GUI")
    root.geometry("800x800")
    density_dry = SpinInput(root, 1, "density_dry", tk.IntVar, 1600, 50)
    saturation = SpinInput(root, 2, "saturation", tk.DoubleVar, 0.25, 0.25)
    diameter = SpinInput(root, 3, "diameter", tk.DoubleVar, 1.0, 0.1)
    cement_content = SpinInput(root, 4, "cement_content", tk.IntVar, 300, 10)
    start_temp = SpinInput(root, 5, "start_temp", tk.IntVar, 25, 1)
    einbau = SpinInput(root, 6, "einbau", tk.DoubleVar, 0, 0.5)
    wz = SpinInput(root, 7, "WZ Wert", tk.DoubleVar, 1, 0.05)
    absetz = SpinInput(root, 8, "Absetzmaß", tk.DoubleVar, 0.9, 0.05)
    soiltemp = SpinInput(root, 9, "soiltemp", tk.IntVar, 10, 1)           
    root.mainloop()  

    
if __name__ == '__main__':
    main()
thx for se help
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Warum erzeugst Du in `write` eine neue `vartype`-Instanz? Das ist doch wieder Unsinn, zudem ist dort `initial_value` gar nicht definiert. Und str(self.value) ist auch nicht sehr sinnvoll.
Du rufst `write` dort auf, woe Du die Datei schreiben willst.
fox1203
User
Beiträge: 56
Registriert: Montag 23. März 2020, 15:19

ach, das hatte ich vergessen zu löschen, vergiss bitte den teil,...

aber zurück zu meiner frage, gibts da lösungen und wenn ja welche?
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Wozu soll es denn eine Lösung geben?
fox1203
User
Beiträge: 56
Registriert: Montag 23. März 2020, 15:19

könntest du mir anhand eines bsp. zu meinem code zeigen, wie ich zB den wert "density_dry" in ein TXT file bekomme und dieser Wert immer wieder neu geschrieben wird, sobald man ihn in der GUI ändert. Dafür suche ich noch eine Lösung, der aktuelle code lautet:

Code: Alles auswählen

#!/usr/bin/env python3
import tkinter as tk

class SpinInput:
    def __init__(self, parent, row, text, vartype, initial_value, step):
        self.value = vartype(value=initial_value)
        self.step = step
        tk.Label(parent, text=text, width=15).grid(column=0, row=row)
        tk.Entry(parent, textvariable=self.value, width=5).grid(column=1, row=row)
        tk.Button(parent, text='-', command=self.decrease).grid(column=2, row=row)
        tk.Button(parent, text='+', command=self.increase).grid(column=3, row=row)
        
    def increase(self):       
        self.value.set(round(self.value.get() + self.step, 2))
        
    def decrease(self):       
        self.value.set(round(self.value.get() - self.step, 2))
        
 
     
def main():
    root = tk.Tk()
    root.title("Test GUI")
    root.geometry("800x800")
    density_dry = SpinInput(root, 1, "density_dry", tk.IntVar, 1600, 50)
    saturation = SpinInput(root, 2, "saturation", tk.DoubleVar, 0.25, 0.25)
    diameter = SpinInput(root, 3, "diameter", tk.DoubleVar, 1.0, 0.1)
    cement_content = SpinInput(root, 4, "cement_content", tk.IntVar, 300, 10)
    start_temp = SpinInput(root, 5, "start_temp", tk.IntVar, 25, 1)
    einbau = SpinInput(root, 6, "einbau", tk.DoubleVar, 0, 0.5)
    wz = SpinInput(root, 7, "WZ Wert", tk.DoubleVar, 1, 0.05)
    absetz = SpinInput(root, 8, "Absetzmaß", tk.DoubleVar, 0.9, 0.05)
    soiltemp = SpinInput(root, 9, "soiltemp", tk.IntVar, 10, 1)           
    root.mainloop()  

    
if __name__ == '__main__':
    main()
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Wie schon vor zehn Beiträgen geschrieben, brauchst Du IntVar.trace wenn Du auf das Ereignis ‹Wert änder sich› reagieren willst. Wie man den Wert in eine Datei schreibt, weißt Du ja prinzipiell.
fox1203
User
Beiträge: 56
Registriert: Montag 23. März 2020, 15:19

Bei nachstehendem Code wird nach Erstellung der GUI ein txt file erzeugt mit den Initial Werten der Entry Objekte. Sobald man auf "+" drückt soll der geänderte Wert in der entsprechenden Zeile im txt file geändert werden. Habe dies versucht über def increase, wobei ich da ja immer nur den Wert erhalte, welchen ich gerade geändert habe, ich es nicht schaffe alle Entry Objekte auszulesen. Wie könnte ich das angehen, und wenn ich es mit dem Befehl IntVar.trace verstanden/geschafft hätte, dann hätte ich nicht nochmal gefragt.

Code: Alles auswählen

#!/usr/bin/env python3
import tkinter as tk







#globale Variablen:
density_grain = 2650



class SpinInput:
    def __init__(self, parent, row, text, vartype, initial_value, step):
        self.value = vartype(value=initial_value)
        self.step = step
        tk.Label(parent, text=text, width=15).grid(column=0, row=row)
        tk.Entry(parent, textvariable=self.value, width=5).grid(column=1, row=row)
        tk.Button(parent, text='-', command=self.decrease).grid(column=2, row=row)
        tk.Button(parent, text='+', command=self.increase).grid(column=3, row=row)
        
    def callback(*args):
        print( "variable changed!")

    def increase(self):       
        self.value.set(round(self.value.get() + self.step, 2))
        print(self.value.get())
        #print(tk.IntVar.trace(self, "r"))
        with open ('test.txt', "a") as file:
            file.write(str(self.value.get()))
        
    def decrease(self):       
        self.value.set(round(self.value.get() - self.step, 2))



 

    
if __name__ == '__main__':

        root = tk.Tk()
        root.title("Test GUI")
        root.geometry("800x800")
        density_dry = SpinInput(root, 1, "density_dry", tk.IntVar, 1600, 50)
        saturation = SpinInput(root, 2, "saturation", tk.DoubleVar, 0.25, 0.25)
        diameter = SpinInput(root, 3, "diameter", tk.DoubleVar, 1.0, 0.1)
        cement_content = SpinInput(root, 4, "cement_content", tk.IntVar, 300, 10)
        start_temp = SpinInput(root, 5, "start_temp", tk.IntVar, 25, 1)
        einbau = SpinInput(root, 6, "einbau", tk.DoubleVar, 0, 0.5)
        wz = SpinInput(root, 7, "WZ Wert", tk.DoubleVar, 1, 0.05)
        absetz = SpinInput(root, 8, "Absetzmaß", tk.DoubleVar, 0.9, 0.05)
        soiltemp = SpinInput(root, 9, "soiltemp", tk.IntVar, 10, 1)

        with open ('parameters.txt', "w") as initfile:
            initfile.write(str(density_dry.value.get()))
            initfile.write("\n")
            initfile.write(str(saturation.value.get()))
            initfile.write("\n")
            initfile.write(str(diameter.value.get()))
            initfile.write("\n")
            initfile.write(str(cement_content.value.get()))
            initfile.write("\n")
            initfile.write(str(start_temp.value.get()))
            initfile.write("\n")
            initfile.write(str(einbau.value.get()))
            initfile.write("\n")
            initfile.write(str(wz.value.get()))
            initfile.write("\n")
            initfile.write(str(absetz.value.get()))
            initfile.write("\n")
            initfile.write(str(soiltemp.value.get()))
            initfile.write("\n")
       




        root.mainloop()
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Die vielen Leerzeilen machen das Lesen schwierig. Globale Variablen sollte es nicht geben, `density_grain` wird nirgends benutzt.
Alles was unter `if __name__...` steht sollte in eine Funktion main wandern.
`callback` wird nicht benutzt. In `increase` hängst Du einfach Werte an eine Datei, OHNE Zeilenumbruch. Das ist also nicht mehr lesbar.
Wenn Du alle Werte speichern willst, mußt Du eine Klasse haben, in der Du alle SpinInputs speicherst und wo Du deren Werte auslesen kannst.
fox1203
User
Beiträge: 56
Registriert: Montag 23. März 2020, 15:19

Sirius3 hat geschrieben: Mittwoch 30. September 2020, 12:31 Die vielen Leerzeilen machen das Lesen schwierig. Globale Variablen sollte es nicht geben, `density_grain` wird nirgends benutzt.
Alles was unter `if __name__...` steht sollte in eine Funktion main wandern.
`callback` wird nicht benutzt. In `increase` hängst Du einfach Werte an eine Datei, OHNE Zeilenumbruch. Das ist also nicht mehr lesbar.
Wenn Du alle Werte speichern willst, mußt Du eine Klasse haben, in der Du alle SpinInputs speicherst und wo Du deren Werte auslesen kannst.
OK dann packe ich alles in die Funktion main. Die "Globale Variable" wird später benötigt, packe ich demnach auch in "def main". "callback" ist noch ein relikt aus den unzähligen Versuchen zuvor, lösche ich raus. Das mit increase stimmt, habs drinnen lassen, damit man zumindest einen Teil sieht was ich bisher gemacht habe.

So nun zum Eigentlichen der Klasse:
Meintest du eine eigene Klasse, oder innerhalb der Klasse SpinInput eine weitere def?
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Du willst mehrere Werte zusammenfassen, daher eine weitere Klasse.
Antworten