使用字典的复选框不会更新值

时间:2016-02-17 00:16:57

标签: python-2.7 dictionary tkinter

民间,

所以我一直在使用Tkinter为一个顶点项目开发一个小图形用户界面,考虑到这种情况,我在编程之前只进行了大约两周的编程,所以我还是一个新手。

我今天的问题是我无法让我的checkbutton字典更新值;我的checkbutton的输出总是0或False。代码如下:

...

datatype= {'Joint Angle' : 0,
     'Joint Acceleration' : 0,
     'Ground Reaction Force' : 0,
     'Muscle Activation' : 0
}

for measure in datatype:
    datatype[measure] = IntVar()
    dt_cb = Checkbutton(root, text=measure,
                    variable=datatype[measure],command = enable_location_state)
dt_cb.grid(column=0, sticky='W', padx=20)


dt1 = datatype['Joint Angle'].get()
dt2 = datatype['Joint Acceleration'].get()
dt3 = datatype['Ground Reaction Force'].get()
dt4 = datatype['Muscle Activation'].get()
...

所以我尝试在整个代码中定期打印值,一旦启动GUI,我就继续得到0,之后,无论我点击什么,数字都没有更新。我读到我应该尝试使用BooleanVar()和StringVar(),但这些都不起作用。代码是基于我在stackoverflow上找到的另一段代码,虽然我不记得究竟在哪里。

我尝试将它作为列表而不是字典,以便克服我的问题,因为我之前已经成功使用了列表,但列表只为所有这些创建了一个单独的按钮,我无法区分是什么。< / p>

命令enable_location_state配置其他检查按钮,如下所示:

def enable_location_state():

    if dt1 == 1 or dt2 == 1:
        ja_cb.configure(state=ACTIVE)

    if dt3 == 1:
        grf_cb.configure(state=ACTIVE)

    if dt4 == 1:
        emg_cb.configure(state=ACTIVE)

1 个答案:

答案 0 :(得分:1)

您的问题是,您只获得IntVar的值一次:在您创建按钮的同一时刻。将.get()语句移至enable_location_state()函数的开头。这样,每次单击您的复选按钮时,该函数都会检查.get()的值IntVar