繁体   English   中英

tkinter 使用列表创建 label 时发生错误

[英]tkinter Error that occured when using list to create label

我最近正在研究 python,现在我正在研究 tkinter 和 firebase。 我正在制作一个可以从经理更改的时间线查看器。

在制作时,我必须制作一张 5*7 大小的标签表。 起初,我试着让它像: label12 = Label(...

但我认为我可以将其放入列表中:label[1][2] = Label(...)

我在其他代码上对其进行了测试,第一个维度列表运行良好,配置正常。 我可以更改 label 的文本: label[1].config(text="test)

但是,当我在第二维列表上使用它时,它给了我一个错误:

AttributeError: 'int' object 没有属性 'config'

这是我发生错误的代码的一部分。 当我使用 config 从 daylabel 更改文本时,它运行良好。

def RegistClicked():
day = \['Mon', 'Tue', 'Wed', 'Thu', 'Fri'\]

    dayarray = ["월요일", "화요일", "수요일", "목요일", "금요일"]
    daylabel = [0 for i in range(5)]
    numlabel = [0 for i in range(8)]
    classnumlabel = [[0 for i in range(6)] for j in range(8)]
    for i in range(0, 5):
        daylabel[i] = Label(win, width=10, height=2, text=dayarray[i])
        daylabel[i].grid(row=4, column=i+2)
    for i in range(0, 7):
        numlabel[i] = Label(win, width=10, height=2, text=i+1)
        numlabel[i].grid(row=i+5, column=1)
    for i in range(1, 8):
        for j in range(1, 6):
            classnumlabel[i][j] = Label(win, width=10, text="value")
            classnumlabel[i][j].grid(row=i+4, column=j+1)
    
    global selectclass
    selectclass = strvar.get()
    classlabel.config(text=selectclass)
    
    for i in range(5):
        for j in range(1, 8):
            dir = db.reference(selectclass +'/'+ day[i] +'/'+ 'class' + str(j))
            print(selectclass +'/'+ day[i] +'/'+ 'class' + str(j))
            classnumlabel[j][i].config(text=dir.get())

一切都很好,直到我点击刷新按钮,触发上面的 function,会杀死程序,错误说 dayclasslabel 数组是一个'int' object。

您的错误是由于尝试在零 integer 上调用config引起的。

而不是“预定义”充满零的列表,只需append放入其中。

此外,不要使用“幻数”和范围,例如(0, 5)(0, 7) ,然后突然使用(1, 8)(1, 6) ,而是将值命名(或者更好的是,在在天的情况下,您可以仅enumerate日期名称列表。

你可能正在寻找这样的东西......

from tkinter import Label, Tk


def build_class_win(class_count):
    win = Tk()

    selectclass = '...'
    day_names = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri']

    day_labels = []
    num_labels = []
    class_num_labels = {}

    # Build day labels

    for day_index, day_name in enumerate(day_names):
        day_label = Label(win, width=10, height=2, text=day_name)
        day_label.grid(row=0, column=day_index + 1)
        day_labels.append(day_label)

    # Build class labels

    for class_index in range(class_count):
        num_label = Label(win, width=10, height=2, text=class_index + 1)
        num_label.grid(row=1 + class_index, column=0)
        num_labels.append(num_label)

    # Build mapping of day/class labels 

    for day_index, day_name in enumerate(day_names):
        for class_index in range(class_count):
            reference = f'{selectclass}/{day_name}/class{class_index}'
            cls_label = Label(win, width=10, text=reference)
            cls_label.grid(row=class_index + 1, column=day_index + 1)
            class_num_labels[(day_index, class_index)] = cls_label
            # TODO: add firebase stuff here
    return win


if __name__ == '__main__':
    win = build_class_win(class_count=7)
    win.mainloop()

window 看起来像

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM