【问题标题】:Tkinter in Python, enumeratePython中的Tkinter,枚举
【发布时间】:2020-01-31 18:55:30
【问题描述】:

我需要你的帮助。我想做几个标签。单击后,每个标签上的数字应根据数字变为文本。我试过这个,但它只是将每个标签上的文本更改为 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()

【问题讨论】:

  • “每个标签上的数字应该变成一个文本”:就目前而言,这不可能是你循环@的情况987654322@ 即[["one", "two",...。做print(widget.grid_info()) 看看你得到了什么。

标签: python list loops tkinter enumerate


【解决方案1】:

是因为你遍历list2中的所有项目,并将event.widget的文本设置为它,所以最终结果是list2的最后一个项目。

您需要保存每个标签的rowcolumn 并使用它们来设置其文本:

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

【讨论】:

    猜你喜欢
    • 2015-08-08
    • 2012-12-05
    • 2022-01-06
    • 2011-05-03
    • 1970-01-01
    • 2011-03-22
    • 2010-11-26
    • 1970-01-01
    • 2017-10-28
    相关资源
    最近更新 更多