我正在尝试动态创建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()
答案 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语句的参数。