自动计算 - 删除初始值

问题描述 投票:-1回答:1

我已经创建了一个GUI,你可以手动输入值(x值)。如果你输入一个值x1,trace-method将自动计算出

f(x1)=x1^2=y1,则平均数(y)=(15 sum_{i=1}^{5} y_i)

所以每输入一个x值,就会计算出相应的y值和平均值(y)。下面的代码可以用。如果你启动它,你会得到。

enter image description here

我想从一些单元格中删除0. 0的初始值。代码执行后,窗口应该是这样的。

enter image description here

为了得到想要的结果,我在最后添加了以下内容 mainloop()

for i in range(1,5):
    y_values[i].set("")
    cells[(i,0)].delete(0,END)

其中我删除了某些单元格的初始值。如果你在启动代码时做了这样的改变,程序将不再正常工作。如果你输入一个x值,只计算相应的y值,而不是平均数(y)。

你们有谁知道为什么用 y_values[i].set(""), cells[(i,0)].delete(0,END) 不再正常工作,如何解决这个问题?

这里是完整的代码(从图片1)。

from tkinter import *
import tkinter as tk

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)
# 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 and standard deviation
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

# Traces to trigger the above functions
for i in range(5):
    x_values[i].trace('w', f)
    y_values[i].trace('w', statistic)

mainloop()
python tkinter trace
1个回答
2
投票

平均数没有计算出来,因为当你试图将None值添加到 y_sum. 增加 try 拦住 statistics 职能。

def statistic(name, index, mode):
    try:
        y_sum = 0
        for i in range(5):
            try:
                y_sum += y_values[i].get()
            except:
                pass
        y_normalized = y_sum / 5
        mean.set(y_normalized)
    except tk.TclError:
            pass
© www.soinside.com 2019 - 2024. All rights reserved.