请参阅以下代码段:
def choose_ID():
import ttk
global single_ID
id = BooleanVar()
toplevel = Toplevel()
label1 = Label(toplevel, text = "Choose a User ID.", width = 40).pack(anchor=W, pady=5)
for items in range(len(single_ID)):
id = Checkbutton(toplevel, text=single_ID[items], variable=single_ID[items])
id.pack(anchor=W, padx=5)
single_run_but = Button(toplevel, text = "Run", width=10, height=1, command=run_command).pack(anchor=S, pady=5)
id.get()
它的目的是打开一个弹出窗口,其中包含许多复选框(数字可以是1到100之间的任何数字),其中包含已从脚本中较早的函数传递给该函数的用户ID。
问题在于最后的id.get()行。当它运行时出现错误,说" Checkbutton实例没有属性' get'"
我需要更改哪些内容才能注明已选中哪个复选框(可能只有一个或多个框)?
非常感谢, 克里斯。
答案 0 :(得分:2)
上一次设置id
是在for循环中。在此期间,您将id
设置为检查按钮,该按钮没有get()
方法。
您要执行的操作是使用get()
方法在IntVar
上通过variable
属性与检查按钮关联。您可以在列表中保留对这些变量的引用。我已经做了一个小例子,说明如何动态创建支票按钮,并且仍然可以获取它们的值。
from Tkinter import *
def run_command():
selected_ids = []
for i, id_var in enumerate(id_var_list):
if id_var.get():
selected_ids.append(id_list[i])
print selected_ids
root = Tk()
Label(root, text = "Choose a User ID.", width = 40).pack(anchor=W, pady=5)
id_list = ['ID1', 'ID2', 'ID100']
id_checkbutton_list = []
id_var_list = []
for item in id_list:
id_var = IntVar()
id_checkbutton = Checkbutton(root, text=item, variable=id_var)
id_checkbutton.pack(anchor=W, padx=5)
id_var_list.append(id_var)
id_checkbutton_list.append(id_checkbutton)
Button(root, text = "Run", width=10, height=1, command=run_command).pack(anchor=S, pady=5)
root.mainloop()