【问题标题】:why is my matrix labels not showing the numbers from the list?为什么我的矩阵标签没有显示列表中的数字?
【发布时间】:2018-04-24 16:00:33
【问题描述】:

使用此代码,框显示全 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()

【问题讨论】:

    标签: python matrix tkinter labels


    【解决方案1】:

    主要问题在于函数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')
    

    【讨论】:

    • 感谢您对我的疑惑的帮助。我理解的 intVar 和 set 方法。我对如何使用列表引用行和列感到困惑。
    • 为了自学,我在玩你的代码。我使用 def initUI(self): for r in range(3): for c in range(3): i=0 for name in the_list: new_list[r,c] = tk.IntVar() new_list[r,c] .set(name) self.label = tk.Label(self, textvariable=new_list[r,c], Relief="ridge",width=45, height=3) 我只得到最后一个数字。 self.label.grid(row=r, column=c, sticky='news') i += 1 为什么我只得到网格上的最后一个数字?谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-28
    • 2018-12-06
    • 2011-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多