![](/img/trans.png)
[英]How to get the list of text values of multiple Checkbuttons in Tkinter in Python?
[英]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.