我正在编写一个小的Tkinter/Python程序,它有一个长度可变的复选框列表(在运行时确定)。
我希望能够随时读取所有复选框的状态,但我不确定该如何进行。
下面是用于生成列表的代码片段(采用自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;
问题是我的处理程序只被调用一次(在创建checkbutton时),而我希望每次单击(选中或未选中)一个Checkbutton
时都调用它,并且在调用它时,我希望它更新lst。
我也有同样的问题。试试这个:
如果将方法作为lambda函数传递,则它会对变量的每次更改执行该方法。
我认为你的要求可以从here中得到。
对于每个
item in lst
变量,必须预先创建不同的IntVar()
变量,以指示每个复选框的独立状态。 我认为除了手动创建它们之外没有其他方法(我假设您没有100个复选框)。 我将重新使用thisanswer中的代码并执行以下操作:您的CheckButton命令正在执行回调,因为这就是您要它执行的操作。该命令应该是对tkinter在单击选中按钮时可以执行的函数的引用。Tkinter将事件对象传递给回调函数。请参阅本Effbot教程,但看起来您已经在尝试实现它们的模式。您可以从event.widget属性获得对checkbutton的引用,如here所述。最后,如果要在回调中引用变量,则需要将变量附加到“self”。
相关问题 更多 >
编程相关推荐