Python:Tkinter:动态创建标签

时间:2020-02-01 05:10:07

标签: python tkinter

我正在尝试动态创建Label,但是语法无效。你能帮我我所缺少的还是其他替代方法

      crsr = cnxn.execute(query)
        row_num=2
        column_num=0
        Variable_Number=1
        for row in crsr.fetchall():

            test='Column_Label'+str(Variable_Number)+' = tk.Label(frame,text="'+row[0]+'")'



#proper Indentation availabe in code        test1='Column_Label'+str(Variable_Number)+'.grid(row='+str(row_num)+',column='+str(column_num)+')'
            eval(test+';'+test1)
    #        eval(test1)
            row_num+=1
            column_num+=1
        root.update_idletasks()

2 个答案:

答案 0 :(得分:1)

您不应该使用exec。如果要在循环中将计算出的名称与窗口小部件相关联,请使用字典:

labels = {}
varnum = 0
for row in crsr.fetchall():
    name=f"label#{varnum}"
    labels[name] = tk.Label(frame, text=str(row[0]))
    labels[name].grid(row=row_num, column=column_num
    varnum += 1
    row_num+=1
    column_num+=1

如果您不太在意名称,可以将小部件存储在列表中而不是字典中,然后使用整数索引(例如:labels[0]labels[1])进行引用。等)。

答案 1 :(得分:0)

使用exec()代替eval()

eval将计算一个表达式,而不是像您想要的那样运行它。 将eval视为if语句的参数。