首页 > 解决方案 > 输入一个条目会导致所有条目都被写入(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_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)

设置按钮用于设置值,然后显示实际板。我遇到的问题是在任何一个框中键入都会导致在其他每个框中键入相同的值。我不明白这是怎么回事。我的数组声明可能有问题吗?另外,我检查了一下,即使单击设置,数组也没有改变。

标签: pythonarraystkinter

解决方案


考虑这行代码:

entry = Entry(root, width=10, bg=colour, textvariable=input[i][j])

由于您初始化的方式input,上面的代码与此相同:

entry = Entry(root, width=10, bg=colour, textvariable="0")

因此,所有小部件都具有相同的值,textvariable因此它们都链接在一起并共享相同的内存值。

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

话虽如此,您很少需要使用textvariable. 由于您没有向变量添加跟踪,因此它们在很大程度上是不必要的。我建议您删除textvariable并将您的条目保存在数组中。然后,您可以调用get条目的方法来获取值。


推荐阅读