tkinter复选按钮值打印

时间:2020-09-13 06:53:31

标签: python user-interface tkinter

我创建一个用于创建农作物列表的复选按钮。我想打印用户选择的农作物,但是它总是向我输出相同的农作物(和我没有选择的农作物),任何人都知道是什么?

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"))

1 个答案:

答案 0 :(得分:0)

让我们看看您在做什么:

您运行了一个循环,该循环不断将b重新分配为其他Checkbuttonb将永远是您创建的最后一个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。顺便说一句:RadiobuttonCheckbutton是不同的东西。 Checkbutton是一个单独的boolean值。 Radiobutton是一组boolean值,其中一个必须为True,而只有一个可以为True。您应该更准确地考虑变量名称。如果您也开始使用Radiobutton怎么办?您需要将其坚持在list上该怎么称呼?