首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用字典更改Tkinter Checkbutton状态

使用字典更改Tkinter Checkbutton状态
EN

Stack Overflow用户
提问于 2016-02-20 06:01:43
回答 1查看 504关注 0票数 0

StackOverflow,

所以我仍然在用Tkinter开发这个GUI,我已经设置了我的checkbutton字典和诸如此类的东西。基本上,我有一个主复选按钮组,然后是3个子复选按钮组,它们的状态应该根据主复选按钮组中的哪个按钮处于活动状态而改变。然而,我的问题是,只有子复选按钮组中的最后一个复选按钮处于活动状态,而其上的复选按钮保持禁用状态。

代码如下:

代码语言:javascript
运行
复制
def enable_location_state():

#Retrieve values to determine whether or not the checkbutton is checked
#0 is off, 1 is on
    dt1 = datatype['Joint Angle'].get()
    dt2 = datatype['Joint Acceleration'].get()
    dt3 = datatype['Ground Reaction Force'].get()
    dt4 = datatype['Muscle Activation'].get()


    if dt1 == 1 or dt2 == 1:
        ja_cb.configure(state=ACTIVE)
    elif dt1 == 0 and dt2 == 0:
        ja_cb.configure(state=DISABLED)

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

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


ilabel1 = Label(root, text=' Measurement',font=("Bold",18)).grid(row=1,column=0)

#Options for the checkbuttons
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)



#EMG
ilabel2 = Label(root, text='Muscle Group(s)',font=("Bold",18),padx=30).grid(row=1,column=1)

emg_groups = {'Quadriceps' : 0,
              'Hamstrings' : 0,
              'Calves' : 0
}

for i, measure in enumerate(emg_groups):
    emg_groups[measure] = IntVar()
    emg_cb = Checkbutton(root, text=measure,     variable=emg_groups[measure],state=DISABLED)
    emg_cb.grid(column=1, row=i+2, sticky='W', padx=30)

emg1 = emg_groups['Quadriceps'].get()
emg2 = emg_groups['Hamstrings'].get()
emg3 = emg_groups['Calves'].get()


ilabel3 = Label(root, text='Ground Reaction Force',font=("Bold",18),padx=30).grid(row=1,column=2)

grf_groups = {'Ground Reaction Force' : 0,
              'Gait' : 0,
}

for i, measure in enumerate(grf_groups):
    grf_groups[measure] = IntVar()
    grf_cb = Checkbutton(root, text=measure,     variable=grf_groups[measure],state=DISABLED)
    grf_cb.grid(column=2, row=i+2, sticky='W', padx=30)

grf1 = grf_groups['Ground Reaction Force'].get()
grf2 = grf_groups['Gait'].get()


#JOINT ANGLES - Both Acceleration and Angles
ilabel4 = Label(root, text='Joints',font=("Bold",18)).grid(row=1,column=3)

ja_groups = {'Hips' : 0,
              'Knees' : 0,
              'Ankles' : 0,
}

for i, measure in enumerate(ja_groups): 
    ja_groups[measure] = IntVar()
    ja_cb = Checkbutton(root, text=measure, variable=ja_groups[measure],state=DISABLED)
    ja_cb.grid(column=3, row=i+2, sticky='W', padx=20)

ja1 = ja_groups['Hips'].get()
ja2 = ja_groups['Knees'].get()
ja3 = ja_groups['Ankles'].get()

"main“复选按钮组是数据类型字典/组,子组是EMG、GRF和JA组。老实说,我也不知道如何读取用字典制作的复选按钮的各个状态/值,我认为知道如何读取也会对这个问题有所帮助。

谢谢您抽时间见我。

EN

回答 1

Stack Overflow用户

发布于 2016-02-20 07:56:40

在这组代码中,以及其他类似的代码中,您将覆盖每个emg_cb,以便它只引用最后创建的一个。这就是IntVar()的作用,所以在enable_location_state()中使用emg_groups。用一个简单的程序进行一点测试就能很好地了解什么能工作,什么不能工作。Checkbutton http://effbot.org/tkinterbook/checkbutton.htm和Tkinter变量引用http://effbot.org/tkinterbook/variable.htm

代码语言:javascript
运行
复制
for i, measure in enumerate(emg_groups):
    emg_groups[measure] = IntVar()
    emg_cb = Checkbutton(root, text=measure, variable=emg_groups[measure],state=DISABLED)
    emg_cb.grid(column=1, row=i+2, sticky='W', padx=30)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35515887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档