我希望文本在每个窗口中出现并更新,而不仅仅是在一个窗口中。我注意到工作的窗口始终是第一个被调用的窗口,但这无助于我解决问题。
我注意到的另一件事是,程序接受在首先显示值的窗口中输入新值,但是任何通过在第二个窗口中输入值来更改值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()
问题的根本原因是 Tkinter 没有设计为有两个根窗口。这样做会产生一些意想不到的副作用,例如您所看到的。实际上,您可以将两个根窗口视为两个无法共享信息的独立进程或线程。您的IntVar
属于第一个窗口,但您尝试在第二个窗口中使用它。
解决方法是永远不要创建多个Tk
实例。如果需要更多窗口,请创建 Toplevel
的实例。这样做,您可以在任意数量的窗口之间共享相同的IntVar
。