ich verwende Python/Tkinter erst vor kurzem und möchte dies für eine Versuchsauswertung benutzen. Der Programm soll wie folgt funktionieren:
1) Der Benuter soll die Anzahl N seiner Messergebnisse eintragen
2) Eine Tabelle mit N Zeilen wird automatisch erzeugt. In die erste Spalte kann der Benutzer seine Messwerte x eingeben
3) Anhand der eingebenen Messwerte x werden in Spalten 2,3 sowie 4 automatisch die Funktionswerte f(x)=x**2, der Mittelwert der Messwerte sowie deren Standardabweichung berechnet.
4) Mit den Messwerten x und den Funktionswerten f(x) wird ein Plott x gegen f(x) (matplotlib) erstellt.
Die Punkte 1),2) werden im unteren Code korrekt ausgeführt.
Ich weiß jedoch nicht, wie der 3) Punkt umgesetzt werden soll. Das Problem ist, dass die Entry-Widgets innerhalb einer Funktion erzeugt werden und somit lokal sind. Um die Werte automatisch mit trace zu berechnen, brauche ich aber globale Variablen.
Bei Punkt 4) stellt sich mir die gleiche Frage. Um die Werte zu erhalten, muss ich .get() verwenden. Die Variablen sind aber wieder lokal...
Hat jemand von euch eine Idee, wie man die Punkte 3)/4) umsetzen kann?
Stark vereinfachter Beispiel Code der die Punkte 1)/2) erfüllt:
Code: Alles auswählen
from functools import partial
import tkinter as tk
def create_rows(name, index, mode, root=None, eingabe=None):
try:
rows = eingabe.get()
except tk.TclError:
pass
else:
for j in range(2):
for i in range(rows):
if j == 0:
tk.Entry(root).grid(row=i+2, column=j)
else:
tk.Entry(root, state = "disabled", disabledforeground="black", disabledbackground="white").grid(row=i+2, column=j)
mittelwert_entry = Entry(root, state = "disabled", disabledforeground="black", disabledbackground="white").grid(row = rows - 1, column=2)
std_entry = Entry(root, state = "disabled", disabledforeground="black", disabledbackground="white").grid(row = rows - 1, column=3)
def main():
root = tk.Tk()
tk.Label(root, text = "Number of measurements:").grid(row=0, column=0, pady=20, padx = 5)
tk.Label(root, text = "x").grid(row=1, column=0)
tk.Label(root, text = "f(x)=x**2").grid(row=1, column=1)
tk.Label(root, text = "Mittelwert x").grid(row=1, column=2, padx = 10)
tk.Label(root, text = "Standardabweichung x").grid(row=1, column=3, padx = 10)
eingabe = tk.IntVar(root)
eingabe.trace('w', partial(create_rows, root=root, eingabe=eingabe))
tk.Entry(root, textvariable=eingabe).grid(row=0, column=1)
root.mainloop()
if __name__ == '__main__':
main()