首页 > 解决方案 > 在 tkinter 中迭代复选框

问题描述

我目前正在学习我的第一个 tkinter 并且遇到了一个我无法真正理解的小问题。基本上我需要根据我拥有的一些字典(有时可能会有所不同)显示一堆复选框,例如dict1如下所示。在这种情况下,每个元素都有一个valueof True。现在,下面的代码是我迄今为止一直在尝试做的,它实际上打印出len(dict1)复选框,但只检查了最后一个 - 我真的不明白。那么我该如何修复它,以便根据每个字典项的布尔语句检查所有复选框(至少在这种情况下)dict1

from tkinter import *

class MainPlot:
    def __init__(self, frame1):

        self.frame1 = frame1

        for i, (key, value) in enumerate(dict1.items()):
            self.CheckVar, self.C = dict(), dict()
            self.CheckVar[key] = IntVar(self.frame1)
            self.CheckVar[key].set(value[1])
            self.C[key] = Checkbutton(self.frame1, text = key, variable=self.CheckVar[key], onvalue = True, offvalue = False)
            self.C[key].grid(row=i, column=0, sticky=NW)


list1 = ["channel1", "channel2"]
dict1 = {"key1": [list1, True],
            "key2": [list1, True],
            "key3": [list1, True],
            "key4": [list1, True],
            "key5": [list1, True],
            "key6": [list1, True],
            "key7": [list1, True],
            "key7": [list1, True]
        }

标签: pythontkinter

解决方案


这是因为你在for循环中重新创建了self.CheckVarand self.C,所以它们只包含for循环中的最后一项。

self.CheckVar, self.C = dict(), dict()在 for 循环之前移动该行将解决问题:

        self.CheckVar, self.C = dict(), dict()
        for i, (key, value) in enumerate(dict1.items()):
            ...

推荐阅读