Python 带有多个Tkinter窗口的复选按钮

Python 带有多个Tkinter窗口的复选按钮,python,multithreading,windows-7,checkbox,tkinter,Python,Multithreading,Windows 7,Checkbox,Tkinter,规格: 蟒蛇2.7.1 Tkinter(Tk版本8.5) Windows7 怠速2.7.1 我正在编写一个程序,该程序“生成”两个窗口,同时撤消两个窗口,销毁其中一个窗口,然后将另一个窗口神化(然后进入主循环)。 这种布置干扰了剩余窗口上的检查按钮 例如: (这似乎不寻常,但它是以这种方式设置的,“temp”窗口将显示在构建根窗口期间出现的问题) 但是,, 似乎只要一个程序处理两个Tkinter窗口, Checkbutton(根目录中)的功能将退出窗口 def ClickAButton():

规格:
蟒蛇2.7.1
Tkinter(Tk版本8.5)
Windows7
怠速2.7.1

我正在编写一个程序,该程序“生成”两个窗口,同时撤消两个窗口,销毁其中一个窗口,然后将另一个窗口神化(然后进入主循环)。
这种布置干扰了剩余窗口上的检查按钮

例如:

(这似乎不寻常,但它是以这种方式设置的,“temp”窗口将显示在构建根窗口期间出现的问题)

但是,, 似乎只要一个程序处理两个Tkinter窗口, Checkbutton(根目录中)的功能将退出窗口

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

(我尝试过重新格式化代码{这会带来它自己的奇怪错误},
重命名变量等
没有“临时”窗口,Checkbutton工作正常

“临时”窗口在Checkbutton被分配、打包之前被破坏,
或者“根”甚至进入主循环!)

整个示例:

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模块) :|

非常感谢

(我今年年初才开始编程。

如果我犯了一些可怕的noobish错误,请原谅!)

Tkinter的设计不是为了有两个根窗口。我很惊讶你的代码能工作。这与多线程无关——Tkinter是单线程的,并且您似乎没有创建任何新线程(如果是,这可能会导致问题)/


您需要使用单个mainloop创建一个根窗口。如果您需要另一个窗口,请创建一个窗口——这正是该小部件的用途。

我觉得在多个窗口中使用Tkinter是“不愉快的”。但是所有其他的小部件都工作得很好,只有一个该死的检查按钮。为它改变这么多似乎是一件非常遗憾的事(哦,集成Toplevel实际上没有太大变化。谢谢!
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()