Ich musste noch ein weiteres Label hinzufügen, wo ein Wert berechnet wird. Den Initial Wert kann ich problemlos in der GUI ausgeben, jedoch fehlt mir die Fantasie wie ich sie nach der Änderung von Parameter row 1 oder 2 wieder ändere. Der Befehl set ist mir zwar bekannt, aber aufgrund der Klasse und def increase/decrease kann ich ja nur immer den Wert ändern, den ich gerade per Klick mit + oder - geändert habe.
Gibt es da eine Möglichkeit den Wert density_moist in der row 3 zu ändern, anschließend an einer Änderung der Werte in Zeile 1 oder 2??
der Code:
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
self.row = row
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))
if self.row == 1:
density_dry = self.value.get()
file_in = open ('parameter.txt', "r")
row1 = file_in.readline()
saturation = float(file_in.readline())
row3 = file_in.readline()
row4 = file_in.readline()
row5 = file_in.readline()
row6 = file_in.readline()
row7 = file_in.readline()
row8 = file_in.readline()
row9 = file_in.readline()
row10 = file_in.readline()
with open ('parameter_change.txt', "w") as file_out:
file_out.write(str(self.value.get()))
file_out.write("\n")
file_out.write(str(saturation))
file_out.write("\n")
#Berechnung Dichte Feucht
n = 1 - density_dry / 2650
density_moist = int(saturation * 1000 * n + density_dry)
file_out.write(str(density_moist))
file_out.write("\n")
file_out.write(row4)
file_out.write(row5)
file_out.write(row6)
file_out.write(row7)
file_out.write(row8)
file_out.write(row9)
file_out.write(row10)
file_in = open ('parameter_change.txt', "r")
werte = file_in.readlines()
with open ('parameter.txt', "w") as file_out:
file_out.writelines(werte)
if self.row == 2:
saturation = self.value.get()
file_in = open ('parameter.txt', "r")
density_dry = int(file_in.readline())
row2 = file_in.readline()
row3 = file_in.readline()
row4 = file_in.readline()
row5 = file_in.readline()
row6 = file_in.readline()
row7 = file_in.readline()
row8 = file_in.readline()
row9 = file_in.readline()
row10 = file_in.readline()
with open ('parameter_change.txt', "w") as file_out:
file_out.write(str(density_dry))
file_out.write("\n")
file_out.write(str(self.value.get()))
file_out.write("\n")
#Berechnung Dichte Feucht
n = 1 - density_dry / 2650
density_moist = int(saturation * 1000 * n + density_dry)
file_out.write(str(density_moist))
file_out.write("\n")
file_out.write(row4)
file_out.write(row5)
file_out.write(row6)
file_out.write(row7)
file_out.write(row8)
file_out.write(row9)
file_out.write(row10)
file_in = open ('parameter_change.txt', "r")
werte = file_in.readlines()
with open ('parameter.txt', "w") as file_out:
file_out.writelines(werte)
if self.row > 2:
print(self.value.get())
file_in = open ('parameter.txt', "r")
row1 = file_in.readline()
row2 = file_in.readline()
row3 = file_in.readline()
row4 = file_in.readline()
row5 = file_in.readline()
row6 = file_in.readline()
row7 = file_in.readline()
row8 = file_in.readline()
row9 = file_in.readline()
row10 = file_in.readline()
with open ('parameter_change.txt', "w") as file_out:
file_out.write(row1)
file_out.write(row2)
file_out.write(row3)
if self.row == 4:
file_out.write(str(self.value.get()))
file_out.write("\n")
else:
file_out.write(row4)
if self.row == 5:
file_out.write(str(self.value.get()))
file_out.write("\n")
else:
file_out.write(row5)
if self.row == 6:
file_out.write(str(self.value.get()))
file_out.write("\n")
else:
file_out.write(row6)
if self.row == 7:
file_out.write(str(self.value.get()))
file_out.write("\n")
else:
file_out.write(row7)
if self.row == 8:
file_out.write(str(self.value.get()))
file_out.write("\n")
else:
file_out.write(row8)
if self.row == 9:
file_out.write(str(self.value.get()))
file_out.write("\n")
else:
file_out.write(row9)
if self.row == 10:
file_out.write(str(self.value.get()))
file_out.write("\n")
else:
file_out.write(row10)
file_in = open ('parameter_change.txt', "r")
werte = file_in.readlines()
with open ('parameter.txt', "w") as file_out:
file_out.writelines(werte)
def decrease(self):
self.value.set(round(self.value.get() - self.step, 2))
if self.row == 1:
density_dry = self.value.get()
file_in = open ('parameter.txt', "r")
row1 = file_in.readline()
saturation = float(file_in.readline())
row3 = file_in.readline()
row4 = file_in.readline()
row5 = file_in.readline()
row6 = file_in.readline()
row7 = file_in.readline()
row8 = file_in.readline()
row9 = file_in.readline()
row10 = file_in.readline()
with open ('parameter_change.txt', "w") as file_out:
file_out.write(str(self.value.get()))
file_out.write("\n")
file_out.write(str(saturation))
file_out.write("\n")
#Berechnung Dichte Feucht
n = 1 - density_dry / 2650
density_moist = int(saturation * 1000 * n + density_dry)
file_out.write(str(density_moist))
file_out.write("\n")
file_out.write(row4)
file_out.write(row5)
file_out.write(row6)
file_out.write(row7)
file_out.write(row8)
file_out.write(row9)
file_out.write(row10)
file_in = open ('parameter_change.txt', "r")
werte = file_in.readlines()
with open ('parameter.txt', "w") as file_out:
file_out.writelines(werte)
if self.row == 2:
saturation = self.value.get()
file_in = open ('parameter.txt', "r")
density_dry = int(file_in.readline())
row2 = file_in.readline()
row3 = file_in.readline()
row4 = file_in.readline()
row5 = file_in.readline()
row6 = file_in.readline()
row7 = file_in.readline()
row8 = file_in.readline()
row9 = file_in.readline()
row10 = file_in.readline()
with open ('parameter_change.txt', "w") as file_out:
file_out.write(str(density_dry))
file_out.write("\n")
file_out.write(str(self.value.get()))
file_out.write("\n")
#Berechnung Dichte Feucht
n = 1 - density_dry / 2650
density_moist = int(saturation * 1000 * n + density_dry)
file_out.write(str(density_moist))
file_out.write("\n")
file_out.write(row4)
file_out.write(row5)
file_out.write(row6)
file_out.write(row7)
file_out.write(row8)
file_out.write(row9)
file_out.write(row10)
file_in = open ('parameter_change.txt', "r")
werte = file_in.readlines()
with open ('parameter.txt', "w") as file_out:
file_out.writelines(werte)
if self.row > 2:
print(self.value.get())
file_in = open ('parameter.txt', "r")
row1 = file_in.readline()
row2 = file_in.readline()
row3 = file_in.readline()
row4 = file_in.readline()
row5 = file_in.readline()
row6 = file_in.readline()
row7 = file_in.readline()
row8 = file_in.readline()
row9 = file_in.readline()
row10 = file_in.readline()
with open ('parameter_change.txt', "w") as file_out:
file_out.write(row1)
file_out.write(row2)
file_out.write(row3)
if self.row == 4:
file_out.write(str(self.value.get()))
file_out.write("\n")
else:
file_out.write(row4)
if self.row == 5:
file_out.write(str(self.value.get()))
file_out.write("\n")
else:
file_out.write(row5)
if self.row == 6:
file_out.write(str(self.value.get()))
file_out.write("\n")
else:
file_out.write(row6)
if self.row == 7:
file_out.write(str(self.value.get()))
file_out.write("\n")
else:
file_out.write(row7)
if self.row == 8:
file_out.write(str(self.value.get()))
file_out.write("\n")
else:
file_out.write(row8)
if self.row == 9:
file_out.write(str(self.value.get()))
file_out.write("\n")
else:
file_out.write(row9)
if self.row == 10:
file_out.write(str(self.value.get()))
file_out.write("\n")
else:
file_out.write(row10)
file_in = open ('parameter_change.txt', "r")
werte = file_in.readlines()
with open ('parameter.txt', "w") as file_out:
file_out.writelines(werte)
def main():
root = tk.Tk()
root.title("Test GUI")
root.geometry("300x300")
density_dry = SpinInput(root, 1, "density_dry", tk.IntVar, 1600, 50)
saturation = SpinInput(root, 2, "saturation", tk.DoubleVar, 0.25, 0.25)
#Berechnung Dichte Feucht
n = 1 - density_dry.value.get() / 2650
density_moist = int(saturation.value.get() * 1000 * n + density_dry.value.get())
row31 = tk.Label(root, text="density_moist", width=15).grid(column=0, row=3)
row32 = tk.Label(root, text= density_moist, width=5).grid(column=1, row=3)
diameter = SpinInput(root, 4, "diameter", tk.DoubleVar, 1.0, 0.1)
cement_content = SpinInput(root, 5, "cement_content", tk.IntVar, 300, 10)
start_temp = SpinInput(root, 6, "start_temp", tk.IntVar, 25, 1)
einbau = SpinInput(root, 7, "einbau", tk.DoubleVar, 0, 0.5)
wz = SpinInput(root, 8, "WZ Wert", tk.DoubleVar, 1, 0.05)
absetz = SpinInput(root, 9, "Absetzmaß", tk.DoubleVar, 0.9, 0.05)
soiltemp = SpinInput(root, 10, "soiltemp", tk.IntVar, 10, 1)
with open ('parameter.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(density_moist))
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")
file_in = open ('parameter.txt', "r")
werte = file_in.readlines()
with open ('parameter_change.txt', "w") as file_out:
file_out.writelines(werte)
root.mainloop()
if __name__ == '__main__':
main()