【发布时间】:2012-02-20 01:18:25
【问题描述】:
我正在编写一个小型 Tkinter/Python 程序,它有一个可变长度的复选框列表(在运行时确定)。
我希望能够随时读取所有复选框的状态,但我不确定我应该如何去做。
这里是生成列表的代码sn-p(来自this post):
def relist(self):
self.text.delete(1.0,END)
p = subprocess.Popen (['ls', '/dev/'], stdout = subprocess.PIPE)
lst = p.communicate()[0].split('\n')
print lst
for item in lst:
v = tk.IntVar()
cb = tk.Checkbutton(text="/dev/%s" % item, variable=v, command=self.cb(index))
self.text.window_create("end", window=cb)
self.text.insert("end", "\n") # to force one checkbox per line
还有我的虚拟处理程序:
def cb(self,idx):
print ("var is %s", str(idx))
lst[idx] = 1;
问题是我的处理程序被调用一次(当创建 Checkbuttons 时),而我希望它在每次单击 Checkbutton 时被调用(选中或未选中),当它被调用时,我想要它更新 lst。
【问题讨论】:
-
有效吗?
self.cb(index)中的index定义在哪里? -
请详细说明?在上面的代码中,为每个创建的复选框调用一次 cb,但仅在创建复选框时调用。调用时,cb 正在打印“var is
”(每个复选框的 idx 不同)。但问题是当一个复选框被修改(选中/取消选中)时,cb 没有被调用
标签: python user-interface checkbox tkinter