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

How to get text values from multiple Tkinter CheckButtons with Python

我正在尝试弄清楚如何从用户单击“提交”时选择的所有复选按钮中获取文本值 button.So 到目前为止,我能够获取按钮的索引号已被选中但无法获取文本 values.For 例如,如果选中第一个、第二个和第五个按钮,它将打印 1、2、5 而不是实际的文本值。我参考了其他 post 关于使用 .cget() 但没有运气。我的下一个想法是使用字典将数字和文本值存储在一起,但我计划使列表更大的唯一问题。我 post 编辑了下面的代码和图片以帮助 explain.Any 建议?

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, command=getChecked, text="Asthma", variable=sick[1]).place(x=270, y=350)

Checkbutton(root, command=getChecked, text="Arthritis", variable=sick[2]).place(x=410, y=350)

Checkbutton(root, command=getChecked, text="Cancer", variable=sick[3]).place(x=560, y=350)

Checkbutton(root, command=getChecked, text="Gout", variable=sick[4]).place(x=130, y=380)

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

# submit button
Button(root, text='Submit', command=getChecked, 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", offvalue="")
Checkbutton(..., variable=sick[2], onvalue="Arthritis", offvalue="")
Checkbutton(..., variable=sick[3], onvalue="Cancer", offvalue="")
Checkbutton(..., variable=sick[4], onvalue="Gout", offvalue="")
Checkbutton(..., variable=sick[5], onvalue="Diabetes", offvalue="")

现在,可以这样打印值:

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

或者更短的内容来打印 comma-separated 列表:

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

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