我对编码很陌生,而且我一直在搞乱tkinter。
我的标签有文本,应该在更新字典值时更改。
我的代码示例:
def setit(point, adic,number):
adic[point] = adic[point]+number
dict={'a':4,'b':8,'c':3}
aa=Label(root,text=dict['a']).pack()
bb=Label(root,text=dict['b']).pack()
cc=Label(root,text=dict['c']).pack()
Button(command=setit('a',dict,3)).pack()
按下按钮时,我想要更新字典和相应的标签。你会怎么做?优选不含OOP。谢谢!
答案 0 :(得分:0)
首先,代码示例中存在两个问题:
1).pack()
会返回None
,因此当您执行aa=Label(root,text=dict['a']).pack()
时,您会将None
存储在变量aa
中,而不是标签中。你应该这样做:
aa = Label(root,text=dict['a'])
aa.pack()
2)按钮的command
选项将函数作为参数,但您执行command=setit('a',dict,3)
,因此您可以在创建按钮时执行该函数。要将带参数的函数传递给按钮命令,可以使用lambda
:
Button(command=lambda: setit('a',dict,3))
然后,要在更改字典中的值时更新标签,您可以将标签存储在具有相同键的字典中,并使用label.configure(text='new value')
更改相应标签的文本:
import tkinter as tk
def setit(point, adic, label_dic, number):
adic[point] = adic[point] + number # change the value in the dictionary
label_dic[point].configure(text=adic[point]) # update the label
root = tk.Tk()
dic = {'a': 4, 'b': 8, 'c': 3}
# make a dictionary of labels with keys matching the ones of dic
labels = {key: tk.Label(root, text=dic[key]) for key in dic}
# display the labels
for label in labels.values():
label.pack()
tk.Button(command=lambda: setit('a', dic, labels, 3)).pack()
root.mainloop()
答案 1 :(得分:-1)
您可以使用StringVar
而不是指定文本值。看起来像是:
d={'a':StringVar(),'b':StringVar(),'c':StringVar()}
aa=Label(root,textvariable=d['a'])
bb=Label(root,textvariable=d['b'])
cc=Label(root,textvariable=d['c'])
aa.pack()
bb.pack()
cc.pack()
然后,只要您想更改标签,就可以
d['a'].set("new text!")
有关标签的更多信息,请参阅here。
注意:dict
是python中的保留字,因此最好不要将其用作变量的名称。同样适用于str
,int
等