python - 输入一个条目会导致所有条目都被写入(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)
设置按钮用于设置值,然后显示实际板。我遇到的问题是在任何一个框中键入都会导致在其他每个框中键入相同的值。我不明白这是怎么回事。我的数组声明可能有问题吗?另外,我检查了一下,即使单击设置,数组也没有改变。
解决方案
考虑这行代码:
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
条目的方法来获取值。
推荐阅读
- kubernetes - 从 helm 连接到 Kubernetes 集群
- mongodb - Homebrew 安装的 mongodb 会覆盖现有数据库吗?
- csv - 批处理文件:将两列的字符串组合到另一列中
- database - 将整个 JFrame 保存在数据库中
- javascript - 在 TypeScript 中从这个实例化?
- android-studio - Flutter 错误:列的子项不得包含任何空值,但在索引 0 处找到空值
- python - 使用 Apache Beam Python API 从 MySQL 读取数据并写入 GCP Bucket
- solr - 使用 SolrJ 更新托管同义词
- kotlin - 使用协程的 Kotlin/Native 多线程
- database - 从引用的列中选择计数