带有多个Tkinter Windows的复选框

时间:2011-07-17 02:00:08

标签: python multithreading windows-7 checkbox tkinter

规格:
Python2.7.1
Tkinter(Tk版本8.5)
Windows7的
IDLE 2.7.1

我正在编写一个程序,“生成”两个窗口,撤回两个窗口,销毁一个窗口,然后取消另一个窗口(然后进入主循环)。 这种安排干扰了剩余窗口上的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。

(我已经尝试重新格式化代码{这会带来奇怪的自己的错误},
重命名变量等。
Checkbutton在没有'temp'窗口的情况下工作正常。

在检查按钮被分配,打包后,“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 个答案:

答案 0 :(得分:1)

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

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