Python 使用tkinter创建绑定到单个列表的复选框数组?
我正在尝试创建一个窗口,该窗口将提供如下所示的复选框网格: 我有以下代码来创建它:Python 使用tkinter创建绑定到单个列表的复选框数组?,python,list,tkinter,checkbox,Python,List,Tkinter,Checkbox,我正在尝试创建一个窗口,该窗口将提供如下所示的复选框网格: 我有以下代码来创建它: checks = Tk() checks.title("Check Grid") value = [] z = 1 for x in range(1,11): # Row for y in range(1,11): # Column value.append('') box = Checkbutto
checks = Tk()
checks.title("Check Grid")
value = []
z = 1
for x in range(1,11): # Row
for y in range(1,11): # Column
value.append('')
box = Checkbutton(checks, text = z, variable = value[(z)-1])
box.grid(row = x, column = y, sticky = S)
z += 1
#exit button
def exit():
print(value)
checks.destroy()
Label = Button(checks, text = 'Exit',command = exit).grid(row = 11)
checks.mainloop()
return value`
这样:box=Checkbutton(checks,text=z,variable=value[(x*y)-1])
我试图将复选框值分配给值列表的z值。这似乎不起作用,有什么想法吗
问题:
如何使用tkinter创建复选框网格,将其值发送到单个列表的列表索引?变量的目标需要是tkinter变量,并且您需要确保保留对这些变量的引用(即:它们不能是局部变量)
该变量必须是tkinter变量(StringVar
通常)。在您的例子中(value.append(“”
),它是一个普通的python字符串。将该行更改为value.append(StringVar())
好的,我这样做了,但得到了相同的结果。我甚至创建了一个新的列表,它遍历value
列表并附加值[x]。get()请在创建IntVar
时传入master
关键字参数(将master=checks
添加到var=IntVar(value=0)
)@TheLizzard:no,在本例中没有必要这样做。将master=checks
放入var=IntVar(value=0)
与将checks
放入框=Checkbutton(checks,)
相同。为了保持一致性,我不会传递master
参数,或者总是传递master
参数。我们可以同意,即使它不会改变程序的外观,我们也不能将其排除在检查按钮之外/behaves@TheLizzard:“将master=checks放入var=IntVar(value=0)与将checks放入box=Checkbutton(checks,)”是一样的-实际上,不是这样。小部件生活在一个层次结构中,第一个参数建立层次结构。变量的master
参数不是建立层次结构,而是定义变量属于哪个解释器。一个设计良好的tkinter应用程序只有一个解释器,因此没有必要消除歧义。“一个设计良好的tkinter应用程序只有一个解释器”——我不同意。IntVar
/Checkbutton
/按钮的第一个参数。。。是master
参数。因此,您可以实际使用var=IntVar(检查,值=0)
。IntVar
和Checkbutton
之间的唯一区别是Checkbutton
可以显示在屏幕上(根据我对tcl工作方式的看法)。因此,传递Checkbutton
的第一个参数与传递IntVar
的第一个参数(master
参数)相同。
values = []
for x in range(1,11): # Row
for y in range(1,11): # Column
var = IntVar(value=0)
values.append(var)
box = Checkbutton(checks, text=z, variable=var)
...
...
def exit():
data = [value.get() for value in values]
print(data)
checks.destroy()