我在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并且在运行时确定,所以我不能展开循环。
有更好的方法吗?提前谢谢。
答案 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)]