f(x1)=x1^2=y1 und Mittelwert(y) = (1/5 Summe_{i=1}^{5} y_i)
berechnet. Also jedes Mal, wenn ein x-Wert eingibt, wird also der entsprechende y-Wert und Mittelwert(y) berechnet. Der untenstehende Code funktioniert. Wenn man ihn startet und in ersten Eintrag x1 Zehn schreibt, erhält man:

Ich möchte die Anfangswerte 0.0 von einigen Zellen entfernen. Das Fenster soll beim Start folgendermaßen aussehen:

Um das gewünschte Ergebnis zu erhalten, fügte ich ganz am Ende vor mainloop()
Code: Alles auswählen
for i in range(1,5):
y_values[i].set("")
cells[(i,0)].delete(0,END)
Weiß jemand von euch warum der Code mit y_values.set(""), cells[(i,0)].delete(0,END) nicht mehr korrekt funktioniert und wie man dieses Problem lösen kann?
Hier ist der vollständige Code aus der ersten Abbildung:
Code: Alles auswählen
from tkinter import *
import tkinter as tk
# compute y-values
def f(name, index, mode):
try:
for i in range(5):
y_values[i].set(x_values[i].get()**2)
except tk.TclError:
pass
# compute mean
def statistic(name, index, mode):
try:
y_sum = 0
for i in range(5):
y_sum += y_values[i].get()
y_normalized = y_sum / 5
mean.set(y_normalized)
except tk.TclError:
pass
root = Tk()
Label(root, text = "x-values",padx = 10).grid(row = 0, column = 0)
Label(root, text = "y-values",padx = 10).grid(row = 0, column = 1)
Label(root, text = "Mean y", padx = 10).grid(row = 0, column = 2)
# Create Variables
x_values, y_values = ["x%d" % x for x in range(5)], ["y%d" % x for x in range(5)]
for i in range (5):
x_values[i], y_values[i] = DoubleVar(), DoubleVar()
mean = DoubleVar()
# Create Table
rows, columns, cells = 5, 2, {}
for i in range(columns):
for j in range(rows):
if i == 0: # x-values that can be entered
b = Entry(root, textvariable=x_values[j])
b.grid(row = j+1, column = i, sticky = W + E)
cells[(j,i)] = b
else: # y-values that are computed by f
b = Label(root, textvariable=y_values[j])
b.grid(row = j+1, column = i, sticky = W + E)
cells[(j,i)] = b
label_mean = Label(root, textvariable = mean).grid(row = 1, column = 2, rowspan = 5)
# Traces to trigger the above functions
for i in range(5):
x_values[i].trace('w', f)
y_values[i].trace('w', statistic)
mainloop()