在这里,我试图创建一个三种水果的列表,苹果、石榴和香蕉,并要求用户选择他们最喜欢的水果。因此,我定义了一个函数print_choice,每次选中任何复选框时都会调用它,并定义了一个数组fruits,当选中复选框时,它会将相应的结果附加到数组中。 我在函数中定义了数组,而不是全局声明,因为值不应该添加两次。但是,我无法在标签框中打印选择,该标签框应显示用户选择的水果列表。你能帮我找出哪里出了错,我怎样才能显示所选的水果吗
import tkinter as tk
from tkinter import *
parent = tk.Tk()
parent.title("My favorite fruits")
l= tk.Label(parent, background="yellow", text="empty", width="30")
l.pack()
w = tk.Label(parent , text ="Select your favorite fruits!", bg="pink", fg = "white")
txt = "you love "
def print_choice():
fruits=list()
global txt
flag=0
while flag==0:
if checkvar1.get()==1 and checkvar2.get==0 and checkvar3.get()==0:
fruits.append("Apple")
flag=1
break
elif checkvar2.get()==1 and checkvar1.get()==0 and checkvar3.get()==0:
fruits.append("Pomegranate")
flag=1
break
elif checkvar3.get()==1 and checkvar1.get()==0 and checkvar2.get()==0:
fruits.append("Banana")
flag=1
break
elif checkvar3.get()==1 and checkvar1.get()==1 and checkvar2.get()==0:
fruits.append("Banana")
fruits.append("Apple")
flag=1
break
elif checkvar3.get()==1 and checkvar1.get()==0 and checkvar2.get()==1:
fruits.append("Banana")
fruits.append("Pomegranate")
flag=1
break
elif checkvar3.get()==0 and checkvar1.get()==1 and checkvar2.get()==1:
fruits.append("Apple")
fruits.append("Pomegranate")
flag=1
break
elif checkvar3.get()==1 and checkvar1.get()==1 and checkvar2.get()==1:
fruits.append("Banana")
fruits.append("Apple")
fruits.append("Pomegranate")
flag=1
break
else :
fruits.append(" ")
for fruit in fruits:
txt += fruit+" "
l.config(text=txt)
checkvar1= tk.IntVar()
checkvar2 = tk.IntVar()
checkvar3 = tk.IntVar()
c1 = tk.Checkbutton(parent, text ="Apple", variable = checkvar1, onvalue=1, offvalue=0,height = 5, width =20, bg="pink", activebackground="yellow", activeforeground="orange", command=print_choice)
c1.pack()
c2 = tk.Checkbutton(parent, text ="Pomegranate", variable = checkvar2, onvalue=1, offvalue=0,height = 5, width =20, bg="pink", command=print_choice)
c2.pack()
c3 = tk.Checkbutton(parent, text ="Banana", variable = checkvar3, onvalue=1, offvalue=0,height = 5, width =20, bg="pink", command=print_choice)
c3.pack()
parent.mainloop()
这是我得到的输出:
每当我尝试选择一个复选框时,Python就会停止响应。有没有可能我在某处遇到了一个无限循环
下面是一个您可能希望如何做到这一点的示例:
在这种情况下,您可以根据需要添加任意多的复选框,在硬代码的代码中,您要做的唯一一件事就是启动Choice类,如so
var_name = Choice('checkbutton name')
,其中var_name是您想要的任何变量名称,checkbutton name是您想要的任何名称(只是为了澄清)你不需要很多if-else语句来知道用户喜欢哪种水果
我将向您展示实现同样目标的两种其他方法
第一种方法是创建一个字典,其中水果名作为键,控制变量作为值。 现在遍历这些项,检查控制变量的值是否为1。如果为1,则将其追加到水果列表中
第一种方法(使用字典):
您可以使用以下代码避免字典和循环:
相关问题 更多 >
编程相关推荐