.get()无法获得复选框的结果

时间:2015-02-10 10:28:27

标签: windows python-2.7 tkinter

请参阅以下代码段:

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'"

我需要更改哪些内容才能注明已选中哪个复选框(可能只有一个或多个框)?

非常感谢, 克里斯。

1 个答案:

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