python - Python中的Tkinter,枚举
问题描述
我需要你的帮助。我想做几个标签。单击后,每个标签上的数字应根据数字变为文本。我试过这个,但它只是将每个标签上的文本更改为 list2 中的最后一项。我应该怎么做才能使它相应地改变?数字和文本在两个列表中的位置相同。
import tkinter as tk
root = tk.Tk()
list1 = [["one", "two", "three", "four"], ["five", "six", "seven", "eight"],["nine","ten","eleven","twelve"]]
list2 = [["1","2","3","4"], ["5", "6", "7", "8"],["9", "10", "11", "12"]]
def change_label(event):
for row, rowinlist in enumerate(list2):
for column, text2 in enumerate(rowinlist):
event.widget.configure(text=text2)
for row, rowinlist in enumerate(list1):
for column, text in enumerate(rowinlist):
label = tk.Label(text=text, width=15, bd=1, relief="raised")
label.grid(row=row, column=column)
label.bind("<1>", change_label)
x = text
root.mainloop()
解决方案
是因为你遍历了里面的所有item ,给它list2
设置了text event.widget
,所以最终的结果就是最后一个item list2
。
您需要保存每个标签的row
andcolumn
并使用它们来设置其文本:
def change_label(event):
row, col = event.widget.pos # get the position of clicked label
event.widget.configure(text=list2[row][col])
for row, rowinlist in enumerate(list1):
for column, text in enumerate(rowinlist):
label = tk.Label(text=text, width=15, bd=1, relief="raised")
label.grid(row=row, column=column)
label.bind("<1>", change_label)
label.pos = (row, column) # save the position of label
推荐阅读
- javascript - 变量未从 Axios 发送到反应中的 API 点
- android - 在画布上绘制全屏可绘制对象时帧速率低
- .net - vb.net 有没有办法知道实例化这个属性的属性构造函数中的类名?
- file - 如何删除正在创建且无法删除的 Error.error 文件?
- html - img 的大小在不同的浏览器中是否有不同的行为?
- javascript - 自定义流类型定义显然没有被读取
- xcode - 从构建阶段设置 Info.plist 值
- c# - 在控制台应用程序中使用数字和字母创建一个 16x26 的网格
- python-3.x - PermissionError:[Errno 13] Windows 上的权限被拒绝(pyinstaller)
- sqlite - 如何在 UWP 的新 SQLiteConnection 中传递 db 路径名?