为什么这三个条目中的内容不能同时更改?

时间:2014-02-06 08:58:32

标签: python tkinter

首先让我们来看看这个程序:

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()

当我更改第一个条目中的内容时,其他两个中的内容不会更改。为什么呢?

1 个答案:

答案 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事件。一般的想法是在条目发生更改(绑定回调)时要求调用函数。在该函数内部,您可以根据已更改的条目中的新值更新其他两个值。