我正在使用以下代码。我的目标是在检查时获取Checkbutton的文本,并将该文本附加到列表中。我想动态编写代码,因为列表的大小' x'可能会改变。这就是我到目前为止所拥有的:
from Tkinter import *
root = Tk()
global j
j = []
x = ['hello', 'this', 'is', 'a', 'list']
def chkbox_checked():
j.append(c.cget("text"))
for i in x:
c = Checkbutton(root, text=i, command=chkbox_checked)
c.grid(sticky=W)
mainloop()
print j
到目前为止我对j的输出是:
['list', 'list', 'list', 'list', 'list'] #depending on how many Checkbuttons I select
我正在寻找像这样的输出:
['this', 'list'] #depending on the Checkbuttons that I select; this would be the output if I
#selected Checkbuttons "this" and "list".
我已经尝试过"变量"检查按钮中的选项,但我似乎无法连接点。谁能指出我正确的方向?我觉得它相对简单。谢谢!
答案 0 :(得分:2)
问题是for循环中的变量c每次迭代都会重新分配。这就是为什么它只打印最后一个元素list
。
一种解决方案是使用lambda函数。
def chkbox_checked(text):
return lambda : j.append(text)
for i in x:
c = Checkbutton(root, text=i, command=chkbox_checked(i))
c.grid(sticky=W)