Tkinter Checkbutton变量

时间:2018-05-16 19:41:44

标签: python python-2.7 tkinter

我在tkinter甚至python都不是很好,所以我遇到了一个简单的问题。

我的项目中间有这样的东西:

visible = numLevels * [IntVar(value=1)]

top = Toplevel()
settingslabel = Label(top, text='Settings', height=0, width=100)

for i in range(0, numLevels ):
    check = ttk.Checkbutton(settingslabel, text='Level ' + str(i), variable=visible[i])
    check.grid(column = 0, row = i)
    check.var = visible[i]

settingslabel.grid(column = 0, row=0)

我想要设置屏幕,每个级别都有一个复选框,同时保持一个表示每个按钮状态的整数数组。

但是,所有复选框都是同步的。这意味着,当我选中一个方框时,所有其他方框也会被检查。我相信这是因为'变量'检查按钮的字段。随着循环继续,我被更新,结果,可见[i]也发生了变化。我想在创建checkbutton时保留变量。我不明白tkinter / python如何运作得很好知道。

数字是水平可以是任何整数> 0并且在运行时确定,所以我不能展开循环。

有更好的方法吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

这是this SO帖子的副本,但下面有解释。

因为你所有的盒子共享相同的tkinter.Intvar()对象:

numlevels = 5
visible = numlevels * [IntVar(value = 1)]

for i in range(len(visible)):
    print (hex(id(visible[i]))

# Outputs:
'0x67f8190'
'0x67f8190'
'0x67f8190'
'0x67f8190'
'0x67f8190'

要解决:visible = [IntVar(value = 1) for i in range(numlevels)]