我有一个动态创建的Tkinter checkbutton小部件,它接收用户名列表的内容。然后,我在旁边显示了带有复选框的名称。
我需要做的是显然收集哪些用户名已被检查,因此我可以将其传递给另一个功能以便采取行动。
我应该如何编写此变量部分,以便创建所选用户名的新列表?
到目前为止我所拥有的:
def delprof_results(users_delprof):
for i in range(len(users_delprof)):
c = Checkbutton(resultsFrame, text=users_delprof[i], variable=users_delprof[i])
c.pack(anchor=W)
def delprof_del():
users_chosen = []
print str(users_delprof[i]).get() # Works up until this point. How to get individual variable with ID.
del_but = Button(resultsFrame, text="Delete", width=7, height=1, command=delprof_del)
del_but.pack(side=LEFT)
提前致谢, 克里斯。
答案 0 :(得分:2)
如果您想要访问单个对象,只需保留对单个对象的引用,而不是创建对象,同时在循环的每次迭代中覆盖相同的变量,如:
for i in range(30):
a = i
如何到达a
的状态13
?好吧,你无法覆盖
而是使用集合类型。在下面的示例中,我使用了dict
:
try: # In order to be able to import tkinter for
import tkinter as tk # either in python 2 or in python 3
except ImportError:
import Tkinter as tk
def upon_select(widget):
print("{}'s value is {}.".format(widget['text'], widget.var.get()))
if __name__ == '__main__':
root = tk.Tk()
names = {"Chester", "James", "Mike"}
username_cbs = dict()
for name in names:
username_cbs[name] = tk.Checkbutton(root, text=name,
onvalue=True, offvalue=False)
username_cbs[name].var = tk.BooleanVar()
username_cbs[name]['variable'] = username_cbs[name].var
username_cbs[name]['command'] = lambda w=username_cbs[name]: \
upon_select(w)
username_cbs[name].pack()
tk.mainloop()
答案 1 :(得分:1)
您可以从检查按钮中创建值列表:
values = []
for i in range(len(users_delprof)):
v = IntVar()
c = Checkbutton(master, text="Don't show this again", variable=v)
c.var = v
values.append(v)
现在,您可以查看列表values
,并使用v.get()
获取复选按钮的值来检查值。