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