民间,
所以我一直在使用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)
答案 0 :(得分:1)
您的问题是,您只获得IntVar
的值一次:在您创建按钮的同一时刻。将.get()
语句移至enable_location_state()
函数的开头。这样,每次单击您的复选按钮时,该函数都会检查.get()
的值IntVar
。