我创建一个用于创建农作物列表的复选按钮。我想打印用户选择的农作物,但是它总是向我输出相同的农作物(和我没有选择的农作物),任何人都知道是什么?
def set_check(event):
global b
var_lst=[]
for widget in radios:
widget.destroy()
if cb_elemnt.get(): # get the crops according to element selection
if cb_elemnt.get() != "N":
crop_values =
pd.unique(df.loc[df["elemnt"].eq(cb_elemnt.get()),"crop"])
else:
crop_values = pd.unique (df_nir.loc[df_nir["elemnt"].eq
(cb_elemnt.get ()), "crop"])
for num, t in enumerate(crop_values, 1): # create and add the crops to check button with number start from
chkValue =IntVar ()
checkbox_variable = IntVar ()
# I need seperate var for each crop
b = Checkbutton (top, text=t, variable=checkbox_variable, font=("Segoe UI Light", 10))
checkbox_variables.append (checkbox_variable)
b.grid (row=num, column=2, sticky='W', padx=40)
radios.append (b)
def regression():
#PLSR
if cb_elemnt.get () != "N":
if var1.get():
element_u= cb_elemnt.get () #The element that the user selected
print(element_u)
for checkbox in checkbox_variables:
if checkbox.get ()==1:
print(b.cget("text"))
答案 0 :(得分:0)
让我们看看您在做什么:
您运行了一个循环,该循环不断将b
重新分配为其他Checkbutton
。 b
将永远是您创建的最后一个Checkbutton
。
for num, t in enumerate(crop_values, 1):
b = Checkbutton (top, text=t, variable=checkbox_variable, font=("Segoe UI Light", 10))
之后,您将b
当作魔术,可以随时随地使用Checkbutton
。
for checkbox in checkbox_variables:
if checkbox.get ()==1:
print(b.cget("text"))
解决方案:
在list
中创建一个Checkbutton
,其索引与您的checkbox_variables
list
直接相关。
示例:
for row, text in enumerate(crop_values, 1):
checkbox_variables.append(IntVar())
checkboxes.append(Checkbutton(top, text=text, variable=checkbox_variables[-1], font=("Segoe UI Light", 10)))
checkboxes[-1].grid(row=row, column=2, sticky='W', padx=40)
#and ...
for checkbox, var in zip(checkboxes, checkbox_variables):
if var.get():
print(checkbox['text'])
编辑:
进一步阅读代码后,您已经在Checkbutton
后面附加了?radios?
(大声笑),但是在下一个循环中未能使用radios
来获得相应的Checkbutton
。顺便说一句:Radiobutton
和Checkbutton
是不同的东西。 Checkbutton
是一个单独的boolean
值。 Radiobutton
是一组boolean
值,其中一个必须为True
,而只有一个可以为True
。您应该更准确地考虑变量名称。如果您也开始使用Radiobutton
怎么办?您需要将其坚持在list
上该怎么称呼?