在tkinter中选中复选框时,如何打印相应的复选框名称



当选中复选框时,我想在控制台中打印相应的复选框名称。

例如,当我选中"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])

最新更新