Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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_Arrays_Tkinter - Fatal编程技术网

Python 键入一个条目会导致将所有条目写入(Tkinter)

Python 键入一个条目会导致将所有条目写入(Tkinter),python,arrays,tkinter,Python,Arrays,Tkinter,我正在使用Tkinter创建一个带有GUI的数独解算器桌面应用程序。我遇到的问题是当它涉及到输入板。 以下是我正在使用的代码: N = 9 input = [["0" for i in range(N)] for j in range(N)] for i in range(N): for j in range(N): new_col = int(j/3) new_row = int(i/3) if (-1)**(new_

我正在使用Tkinter创建一个带有GUI的数独解算器桌面应用程序。我遇到的问题是当它涉及到输入板。 以下是我正在使用的代码:

N = 9
input = [["0" for i in range(N)] for j in range(N)]
for i in range(N):
    for j in range(N):
        new_col = int(j/3)
        new_row = int(i/3)
        if (-1)**(new_col+new_row) == 1:
            colour = "lightgrey"
        else:
            colour = "white"
        entry = Entry(root, width=10, bg=colour, textvariable=input[i][j])
        entry.grid(row=i, column=j)
set_button = Button(root, text="Set", command=set, padx=20, pady=10).grid(row=10,column=3, columnspan=3)
设置按钮用于设置值,然后显示实际板。 我遇到的问题是,在任何一个框中输入都会导致在其他框中输入相同的值。我不明白这是怎么发生的。我的数组声明可能有错吗?
另外,我选中了,即使在单击“设置”之后,数组也没有改变。

考虑这行代码:

entry = Entry(root, width=10, bg=colour, textvariable=input[i][j])
由于您初始化
输入的方式
,上述代码与此相同:

entry = Entry(root, width=10, bg=colour, textvariable="0")
因此,所有小部件对于
textvariable
都具有相同的值,因此它们都链接在一起并共享相同的值内存

每个条目都需要一个唯一的
textvariable
,该选项的值需要是一个tkinter变量对象,例如
StringVar


也就是说,您很少需要使用
textvariable
。因为您没有向变量添加跟踪,所以它们基本上是不必要的。我建议您删除
textvariable
,而是将条目保存在数组中。然后可以调用条目的
get
方法来获取值。

首先,
textvariable
参数必须是
tkinter.StringVar()
而不是基本的python
str
。其次,为什么不将条目放入数组中?您可以使用
.get()
获取用户的输入,
.delete(0,“end”)
清除条目,并使用
.insert(“end”)
在条目末尾插入文本