当选中复选框时,我想在控制台中打印相应的复选框名称。
例如,当我选中"COPYRIGHT"复选框时:
我想要打印的内容:"版权">
打印内容:"创建">
我发现,当我用metadata_list的其他元素替换create时,新替换的元素总是被打印出来。通常,metadata_list的最后一个元素总是由temp((函数打印的,无论我选中哪个复选框。我认为当我在函数中传递"key"作为命令时,会有一些hulululu。
但当键从temp((函数外部打印时,会显示正确的键值,就像在for循环内部一样。我在这里做错了什么?
这是主文件:
import tkinter as tk
import variable_container as vc
metadata_frame = tk.Tk()
def temp(key):
print(key)
for key,i in vc.metadata_list.items():
i[1] = tk.IntVar()
tk.Checkbutton(metadata_frame, text = key.upper(), variable = i[1], command = lambda: temp(key)).grid(row = i[0])
print(key)
metadata_frame.mainloop()
这是variable_container.py文件:
# Values are the row information and respective checkbox variables
metadata_list = {
'copyright': [0, var_copyright],
'location': [1, var_location],
'creation': [2,var_creation]
}
您需要向lambda函数传递一个参数,否则lambda将使用键上的引用来执行。在执行lambda时,键值为creation
。如果您传递参数,则密钥的值将复制为参数
tk.Checkbutton(metadata_frame, text = key.upper(), variable = i[1], command = lambda param = key: temp(param)).grid(row = i[0])