如何解决如何使用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 举报,一经查实,本站将立刻删除。