每当在条目1,2,3,4,5中输入一个数字时,刷新条目6



我有一个小而坏的tkinter程序来玩MagicSquare,我有一个5x5的输入框网格,在行和列的每个末端是一个应该计算行/列总和的框。当你开始游戏时,一些盒子是随机填满数字的。现在我的挣扎是随时随地用户在尚未填写的"条目"中键入数字,或者在"条目"框中重新键入数字,该框中的总和应该更新。我想知道如何在不按任何按钮或激活功能的情况下更新,因为数字只输入。

谢谢你的帮助!

我尝试使用另一个函数作为update_value()来。set() stringvar(),然后在网格创建函数

中调用update_value()函数这里如果一个数字随机分配给Entry1它会被放入SumBox S1但是如果它是空的并且我在Entry中输入了一些东西什么也没有发生所以S1。

def grid_insertion_5():
global slots
global v1
global S1
grid_data(5)
frame_grid()
print(data)
slots = []
for i in range(1,26):
slots.append("E"+str(i))
print(slots)
pos = 0
for i in range(5):
for j in range(5):
insertion = data[i][j]
if insertion != 0:
slots[pos] = Entry(frame2, width=3, font="Arial 30")
slots[pos].grid(row=i, column=j, sticky=N + S + E + W, padx=5, pady=5)
slots[pos].insert(0,insertion)
slots[pos].config(state="readonly")
else:
slots[pos] = Entry(frame2, width=3, font="Arial 30",state=NORMAL)
slots[pos].grid(row=i, column=j, sticky=N + S + E + W, padx=5, pady=5)
pos+=1
v1 = StringVar()
S1 = Entry(frame2,width=3, font="Arial 30", textvariable=v1)
S1.grid(row=0,column=5,padx=5,pady=5)
root.after(1, update_value)

def update_value():
v1.set(slots[0].get())
root.update()
def test_example():
one_str = StringVar()
two_str = StringVar()
one_entry = Entry(root,textvariable=one_str)
one_entry.grid(row=2,column=0,)
two_entry = Entry(root, textvariable=two_str)
two_entry.grid(row=3,column=0)
three_entry= Entry(root)
three_entry.grid(row=4,column=0)
one_str.trace("w",update_value)
two_str.trace("w",update_value)
def update_value():
three_entry.insert(0,one_entry.get()+two_entry.get())

看这个:

import tkinter as tk
def update_value(*args):
# Delete whatever is in the entry
three_entry.delete(0, "end")
try:
# Compute the new data
new_data = int(one_entry.get()) + int(two_entry.get())
# Put the new data in the entry
three_entry.insert(0, new_data)
except ValueError:
print("ValueError, one or both of the entries aren't integers")
root = tk.Tk()
one_str = tk.StringVar()
one_entry = tk.Entry(root, textvariable=one_str)
one_entry.grid(row=2,column=0,)
two_str = tk.StringVar()
two_entry = tk.Entry(root, textvariable=two_str)
two_entry.grid(row=3, column=0)
three_entry= tk.Entry(root)
three_entry.grid(row=4, column=0)
# each time `one_str` or `two_str` is modified call `update_value`
one_str.trace("w", update_value)
two_str.trace("w", update_value)
root.mainloop()

它使用.trace调用update_value每次2项中的一个被改变。在update_value中,我尝试将one_entrytwo_entry的内容添加为int的egers,并将其放入three_entry中。有关.trace工作原理的更多信息,请查看此处。

最新更新