为什么我的矩阵标签没有显示列表中的数字?

why is my matrix labels not showing the numbers from the list?

使用此代码,方框显示全 0。我不确定为什么它没有在列表中显示序列。它应该在[0,0]的位置显示“1”,在[0,1]的位置显示“3”,在[0,2]的位置显示“2”......等等,直到它填满所有9个数字在9个盒子里。

import tkinter as tk

the_list = (1, 3, 2, 4, 12, 56, 7, 10, 19)
var_categories = {}

def main():

    root = tk.Tk()
    root.title("class basic window")
    root.geometry("500x300")
    root.config(background="LightBlue4")
    app = Application(root)
    root.mainloop()


class Application(tk.Frame):

    def __init__(self, parent):
        tk.Frame.__init__(self, parent, bg="ivory2", bd=2, relief=tk.RAISED)   
        self.parent = parent
        self.pack(fill=tk.BOTH, expand=1)
        self.initUI()


    def initUI(self):

        iterator = iter(the_list)

        for r in range(3):
            for c in range(3):
                item = next(iterator)

                self.labelVariable = tk.IntVar()

                self.label = tk.Label(self, textvariable=self.labelVariable, relief="ridge",width=8, height=3 )
                self.label.grid(row=r, column=c, sticky='news')

                var_categories[item] = self.labelVariable


if __name__ == '__main__':
    main()

主要问题出在函数 initUI 中:当您创建一个 IntVar 时,您必须使用它的 set 方法设置它的值。另外,我猜你的 var_categories 字典应该按它在矩阵中的位置索引,而不是按矩阵单元格的内容索引,对吗?这是提供您想要的输出的修改函数:

def initUI(self):
    iterator = iter(the_list)
    for r in range(3):
        for c in range(3):
            item = next(iterator)
            var_categories[r,c] = tk.IntVar()
            var_categories[r,c].set(item)
            self.label = tk.Label(self, textvariable=var_categories[r,c], relief="ridge",width=8, height=3)
            self.label.grid(row=r, column=c, sticky='news')