眼镜:
Python2.7.1
Tkinter(Tk版本8.5)
Windows 7的
IDLE 2.7.1
我'm coding a program that '产生两个窗口,撤回两个窗口,销毁一个窗口,然后取消另一个窗口(然后进入主循环) .
这种安排干扰了剩余窗口上的Checkbutton .
例如:
temp = Tk()
temp.withdraw()
root = Tk()
root.withdraw()
temp.destroy()
root.mainloop()
(这看起来很不寻常,但它是以这种方式设置的,因此'temp'窗口将显示在构建根窗口期间出现的问题) .
但是,似乎只要一个程序处理两个Tkinter窗口,Checkbutton(在root中)的功能就会消失 .
def ClickAButton():
print Toggle.get()
Toggle = IntVar()
Checkbutton(root, text = "Me is broke", variable = Toggle).pack()
ClickAButton
如果选中Checkbutton,则Toggle.get()应返回1,否则返回0 .
但是,由于添加新窗口,Toggle.get始终返回0 .
(我've tried reformatting code {this brings up strange erros of it'自己},
重命名变量等
没有'temp'窗口,Checkbutton工作得很好 .
在Checkbutton被分配,打包之前,'temp'窗口被销毁 .
或'root'甚至进入主循环!)
整个例如:
temp = Tk()
temp.withdraw()
root = Tk()
root.withdraw()
if 'certain condition':
root.destroy()
temp.deiconify()
temp.mainloop()
else:
temp.destroy()
Toggle = IntVar()
Checkbutton(root, text = "Why I only return 0?", variable = Toggle).pack()
root.deiconify()
root.mainloop()
由于某些原因,
即使选中,Checkbutton也始终返回0 .
我怀疑这是Tkinter的多线程问题 .
我能在这做什么吗?
(实际的编码是巨大的 . 我不急于将它全部切换到另一个GUI模块):|
非常感激!
(我今年才开始编程 .
如果我犯了一些可怕的错误,请原谅我!)
1 回答
Tkinter没有设计为有两个根窗口 . 我很惊讶你的代码工作 . 这与多线程无关--Tkinter是单线程的,你似乎没有创建任何新线程(不管你是否,这可能会导致问题)/
您需要使用单个主循环创建单个根窗口 . 如果您需要另一个窗口,请创建一个Toplevel窗口 - 这正是该窗口小部件的用途 .