【问题标题】:Checkbuttons with Multiple Tkinter Windows带有多个 Tkinter 窗口的检查按钮
【发布时间】:2011-07-17 02:00:08
【问题描述】:

规格:
Python2.7.1
Tkinter(Tk 版本 8.5)
Windows7
空闲 2.7.1

我正在编写一个程序,该程序“生成”两个窗口,撤回两个窗口,销毁一个窗口,然后将另一个窗口去图标化(然后进入主循环)。
这种安排干扰了剩余窗口上的检查按钮。

例如:

temp = Tk()
temp.withdraw()

root = Tk()
root.withdraw()
temp.destroy()

root.mainloop()

(这似乎不寻常,但它是这样设置的,以便“临时”窗口将显示在构建根窗口期间出现的问题)。

然而, 似乎只要一个程序处理两个 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 在没有“temp”窗口的情况下也能正常工作。

“临时”窗口在 Checkbutton 被分配、打包之前就被破坏了,
或者'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 模块) :|

非常感谢!

(我今年年初才开始编程。
如果我犯了一些可怕的愚蠢错误,请原谅我!)

【问题讨论】:

    标签: python multithreading windows-7 checkbox tkinter


    【解决方案1】:

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

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

    【讨论】:

    • 我感觉将 Tkinter 用于多个窗口是“不愉快的”。但是所有其他小部件都可以完美运行,它只是一个该死的 Checkbutton。为它做出如此大的改变似乎是一种巨大的耻辱。 :(
    • 哦,集成 Toplevel 实际上并没有太大变化。谢谢!
    猜你喜欢
    • 2023-03-07
    • 2015-02-22
    • 1970-01-01
    • 2020-04-02
    • 2019-04-29
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多