如何使用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))

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...