首先让我们来看看这个程序:
def entry_simutaneously_change():
from Tkinter import *
root=Tk()
text_in_entry.set(0)
Entry(root, width=30, textvariable= text_in_entry).pack()
Entry(root, width=30, textvariable= text_in_entry).pack()
Entry(root, width=30, textvariable= text_in_entry).pack()
root.mainloop()
这三个条目中的内容可以同时更改。如果我更改其中任何一个的值,其他两个将同时更改。但是,对于以下程序:
def entry_simutaneously_change():
from Tkinter import *
root=Tk()
text_in_entry_list=[IntVar() for i in range(0,3)]
text_in_entry_list[0].set(0)
text_in_entry_list[1].set(text_in_entry_list[0].get() ** 2)
text_in_entry_list[2].set(text_in_entry_list[0].get() ** 3)
Entry(root, width=30, textvariable= text_in_entry_list[0]).pack()
Entry(root, width=30, textvariable= text_in_entry_list[1]).pack()
Entry(root, width=30, textvariable= text_in_entry_list[2]).pack()
root.mainloop()
当我更改第一个条目中的内容时,其他两个中的内容不会更改。为什么呢?
答案 0 :(得分:0)
在第一个程序中,您有一个数据源text_in_entry。您可以将其视为一个框,您可以在其中放置每个条目读取的单个值。
在第二个程序中,您有三个数据源,text_in_entry [0,1和2]。设置初始值的行只调用一次。这就像你有三个盒子放置数据;要设置初始值,你要看第一个里面的值,但三者之间没有关联。
如果您希望获得与第一个程序相同类型的结果(当三个条目同时更新时),那么您将需要绑定一个事件。我注意到Tkinker does not have an on-change style event but there are various hacks,但您可以绑定到FocusOut事件。一般的想法是在条目发生更改(绑定回调)时要求调用函数。在该函数内部,您可以根据已更改的条目中的新值更新其他两个值。