使用条目并更新输入的条目,因为用户继续更改 TKinter 中的值(使用跟踪方法)



我正在学习Python,并开始学习如何使用TKinter GUI。我正在制作一个小界面,可以进行一些简单的统计分析,例如 STDEV、T 测试等。我在一个类中有这种方法,它基本上可以获取要使用的数据。

我希望用户能够输入任意数量的数据条目(我的意思是,只要计算机可以处理)。我遇到的问题是 - 我认为当我在条目上使用 .get() 方法时,没有返回?

我还使用 DoubleVar() 的 .trace() 方法跟踪何时使用此处显示的方法更新条目的值:

更改条目时 Python Tkinter 更新

我认为这是有道理的,但它对我不起作用。每当我在 TK 界面中更改一个框时,所有其他框都会更改,但用于计算标准偏差的值不是输入框上显示的数字(无论如何都是一样的)。

这是代码:

类标准偏差: """ 运行标准衰减计算。 """>

def __init__(self) -> None:
"""
Initializes an instance of the functions!
"""
self.stdev_pop = Button(top_frame,
text="Calculate the population "
"standard deviation of the data set")
self.stdev_pop.bind("<Button-1>", self.show_result_population)
self.stdev_pop.pack()
stdev_samp = Button(top_frame,
text="Calculate the sample "
"standard deviation of the data set")
stdev_samp.bind("<Button-1>", self.show_result_sample)
stdev_samp.pack()
self.data = []
self.enter_data = Button(top_frame, text="Enter data")
self.enter_data.bind("<Button-1>", self.pack_add_entry_button)
self.add_entry = Button(top_frame, text="Add data entry",
command=self.add_new_entry)
self.enter_data.pack()
self.all_entries = {}
self.tracer = DoubleVar()
self.tracer.trace("w", self.update)
def pack_add_entry_button(self, *args) -> None:
"""
Pack the add_entry button.
"""
self.add_entry.pack()
def update(self, *args) -> None:
"""
Update the values of the entries.
"""
global update_in_progress
if update_in_progress:
return
update_in_progress = True
data = [str(self.all_entries[item]) for item in self.all_entries]
self.data = [int(item) for item in data if item.isnumeric()]
update_in_progress = False
def add_new_entry(self):
"""
Add a new entry.
"""
new_entry = Entry(root, textvariable=self.tracer)
new_entry.pack()
new_entry_data = new_entry.get()
self.all_entries[new_entry] = new_entry_data 

我不确定我在这里错在哪里,如果有人可以帮助我,我将不胜感激。谢谢!

由于缩进关闭并且某些按钮调用不存在的函数,因此无法运行您发布的代码,因此这是一个标准的跟踪程序,显示如何使用与跟踪关联的 tkinter 变量(在这种情况下为 StringVar)来获取内容。

import tkinter
def text_changed(*args):
print(tk_name.get())
top = tkinter.Tk()
tk_name=tkinter.StringVar()
tk_name.set("nothing")
tk_name.trace("w", text_changed)
tkinter.Label(top, textvariable=tk_name).grid(row=0, column=1)
entry_1 = tkinter.Entry(top, textvariable=tk_name)
entry_1.grid(row=1, column=1, sticky="W")
entry_1.focus_set()
top.mainloop()

最新更新