【问题标题】:Entanglement between Tkinter CheckbuttonsTkinter Checkbuttons 之间的纠缠
【发布时间】:2020-09-12 18:57:48
【问题描述】:

嘿,所以我正在制作一个程序,它在主窗口上有一个复选按钮,而顶层窗口也有一个复选按钮。问题是,由于某种原因,顶级检查按钮会影响主检查按钮的状态,或者主检查按钮模仿顶级一(如果您选中/取消选中顶级一,主要检查/取消选中)。这是显示问题的示例代码:

import tkinter as tk

def toplevel():
    top = tk.Toplevel()
    top.geometry('200x50')

    top_chekbutton = tk.Checkbutton(top, text='top')

    top_chekbutton.pack()

    top.mainloop()

main = tk.Tk()
main.geometry('200x50')

open_top = tk.Button(main, text='open top', command=toplevel)

main_checkbutton = tk.Checkbutton(main, text='main')

main_checkbutton.pack()
open_top.pack()

main.mainloop()

我没有定义状态变量,因为它们似乎不是问题的根源。我在 win10 上使用 python 3.7.7 和 tkinter 8.6。 请帮忙:(

【问题讨论】:

标签: python python-3.x windows tkinter tkinter.checkbutton


【解决方案1】:

一般来说,Checkbutton 的每个实例都应该有一个与之关联的变量。如果不这样做,将使用与所有Checkbuttons 相同的默认值。共享相同变量的所有小部件将显示相同的值。

您可以通过打印出top_chekbutton.cget("variable")main_checkbutton.cget("variable") 的值自行验证。在这两种情况下,值都是“!checkbutton”(至少,对于我正在使用的python版本)。

因此,为您的复选按钮分配一个变量,例如 BooleanVarIntVarStringVar

main_var = tk.BooleanVar(value=False)
main_checkbutton = tk.Checkbutton(main, text='main')

【讨论】:

  • 好吧,这很有意义,但在我的实际程序中,它们有不同的变量,它们仍然做同样的事情:C
  • @savyexe:我只能回复您发布的代码。如果复选框被“纠缠”,唯一的解释是它们具有相同的变量。如果你的变量是本地的,这可能是一个副作用。
  • welp,除了变量的实际值没有改变之外,它工作得很好,所以我在检查按钮中添加了一个命令函数,以便在按下它时更改变量的值,现在它工作,感谢您的建议:D
  • @savyexe:您不需要这样做。复选按钮将自动设置相关变量的值。如果它不这样做,你就做错了。
猜你喜欢
  • 2014-10-21
  • 1970-01-01
  • 1970-01-01
  • 2015-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-14
  • 2023-01-20
相关资源
最近更新 更多