Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用tkinter创建绑定到单个列表的复选框数组?_Python_List_Tkinter_Checkbox - Fatal编程技术网

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()