Python 2.7 Tkinter - 多窗口条目更新

时间:2014-12-03 21:34:55

标签: python python-2.7 tkinter global-variables tkinter-entry

我希望文本在每个窗口中显示和更新,而不是仅在一个窗口中。我注意到有效的窗口始终是第一个被调用的窗口,但这并没有帮助我解决问题。

我注意到的另一件事是程序接受在窗口中输入新值,这些值首先显示一个值,但是通过在第二个窗口中输入值来更改de值的任何尝试都会失败。

以下是我的代码的简化版本:

from Tkinter import *

root = Tk()
root2 = Tk()
de= IntVar()
de.set(0)

def previous():
    de.set(de.get()-1)

def Next():
    de.set(de.get()+1)

def go_to(event) :
    de.set(de.get())

button4 =Button( root2, text='Next', command=Next )
button4.grid(row=26 ,column=9, columnspan=2, rowspan=1,padx=0, pady=0, sticky=W+E+N+S)
button5 =Button( root2, text='Previous', command=previous )
button5.grid(row=26, column=6, columnspan=2, rowspan=1,padx=0, pady=0, sticky=W+E+N+S)

label1=Label(root2, text = 'Go to2')
entry1 = Entry(root2,textvariable=de,bd=1,width=3)
entry1.bind("<Return>", go_to)
label1.grid(row=25, column=8, columnspan=1, rowspan=1,padx=0, pady=0)
entry1.grid(row=26, column=8, columnspan=1, rowspan=1,padx=0, pady=0)

button3 =Button( root, text='Next', command=Next )
button3.grid(row=26 ,column=9, columnspan=2, rowspan=1,padx=0, pady=0, sticky=W+E+N+S)
button2 =Button( root, text='Previous', command=previous )
button2.grid(row=26, column=6, columnspan=2, rowspan=1,padx=0, pady=0, sticky=W+E+N+S)

label=Label(root, text = 'Go to1')
entry = Entry(root,textvariable=de,bd=1,width=3)
entry.bind("<Return>", go_to)
label.grid(row=25, column=8, columnspan=1, rowspan=1,padx=0, pady=0)
entry.grid(row=26, column=8, columnspan=1, rowspan=1,padx=0, pady=0)

root2.mainloop()
root.mainloop()

1 个答案:

答案 0 :(得分:2)

问题的根本原因是Tkinter没有设计为有两个根窗口。这样做有一些意想不到的副作用,例如你所看到的。实际上,您可以将两个根窗口视为两个不能共享信息的独立进程或线程。您的IntVar属于第一个窗口,但您在第二个窗口中尝试使用它。

修复方法是永远不要创建Tk的多个实例。如果您需要更多窗口,请创建Toplevel的实例。这样做,您可以在任意数量的窗口中共享相同的IntVar