繁体   English   中英

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

[英]How to get text values from multiple Tkinter CheckButtons with Python

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

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设置为您想要的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)

或者可能更短的打印逗号分隔列表:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM