【发布时间】:2018-10-26 23:23:47
【问题描述】:
我不擅长 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 被更新,结果, visible[i] 也发生了变化。我想在创建复选按钮时保留变量。我不明白 tkinter/python 是如何工作的。
levels 的数字可以是任何大于 0 的整数,并且是在运行时确定的,所以我不能只是展开循环。
有没有更好的方法来做到这一点?提前致谢。
【问题讨论】:
-
试试
visible = [IntVar(value=1) for i in range(numLevels)],或者只是check.var = IntVar(value=1)。我认为您当前的numLevels * [IntVar(value=1)]有问题。
标签: python python-2.7 tkinter