Python,Tkinter:Checked时从Checkbutton获取文本

时间:2014-09-11 23:48:19

标签: python python-2.7 python-3.x tkinter

我正在使用以下代码。我的目标是在检查时获取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".

我已经尝试过"变量"检查按钮中的选项,但我似乎无法连接点。谁能指出我正确的方向?我觉得它相对简单。谢谢!

1 个答案:

答案 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)