微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用Python从多个Tkinter CheckButton中获取文本值

如何解决如何使用Python从多个Tkinter CheckButton中获取文本值

我试图弄清楚如何从用户单击“提交”按钮时选择的所有“检查”按钮中获取文本值。到目前为止,我已经能够获取已选择的按钮的索引号例如,如果选中了第一个,第二个和第五个按钮,它将打印1,2,5,而不打印实际的文本值。 iv引用了其他有关使用 .cget()文章,但没有运气。我的下一个想法是使用字典将数字和文本值存储在一起,但这是我计划使列表更大的唯一问题。 iv在下面发布了代码图片以帮助解释。有什么建议吗?

from tkinter import *

sick = []

def getChecked():
   for i in range(len(sick)):
    selected = ""
    if sick[i].get() >= 1:
       selected += str(i)
       print(selected)


 root = Tk()
 root.geometry('850x750')
 root.title("Registration Form")

for i in range(6):
    option = Intvar()
    option.set(0)
sick.append(option)


   # Conditions checkbutton
 label_6 = Label(root,text="Have you ever had ( Please check all that apply ) :",width=50,font= 
                 ("bold",10))
 label_6.place(x=35,y=330)

Checkbutton(root,command=getChecked,text="Anemia",variable=sick[0]).place(x=130,y=350)

Checkbutton(root,text="Asthma",variable=sick[1]).place(x=270,text="Arthritis",variable=sick[2]).place(x=410,text="Cancer",variable=sick[3]).place(x=560,text="Gout",variable=sick[4]).place(x=130,y=380)

Checkbutton(root,text="Diabetes",variable=sick[5]).place(x=270,y=380)

# submit button
Button(root,text='Submit',width=20,bg='brown',fg='white').place(x=180,y=600)

root.mainloop()

解决方法

您需要在循环中移动sick.append(option)

for i in range(6):
    option = IntVar()
    option.set(0)
    sick.append(option)

此外,如果将所需的值用作复选按钮的值,则效率会更高。

例如,从StringVar开始,然后将值初始化为空字符串:

for i in range(6):
    option = StringVar(value="")
    sick.append(option)

接下来,将onvalue设置为所需的复选框按钮值,并将offvalue设置为空字符串:

Checkbutton(...,variable=sick[0],onvalue="Anemia",offvalue="")
Checkbutton(...,variable=sick[1],onvalue="Athma",variable=sick[2],onvalue="Arthritis",variable=sick[3],onvalue="Cancer",variable=sick[4],onvalue="Gout",variable=sick[5],onvalue="Diabetes",offvalue="")

现在,可以像这样打印值了:

def getChecked():
    for var in sick:
        value = var.get()
        if value:
            print(value)

或者也许更短一些来打印逗号分隔的列表:

def getChecked():
    values = [var.get() for var in sick if var.get()]
    print("choices:",",".join(values))

这样做的好处是,值不必与标签相同。例如,如果这些值要存储到数据库中并且必须全部小写,则标签可以大写,但值可以小写。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。