首页 > 解决方案 > 使用 tkinter python 中的列表框项目取消选中复选框并打印列表框的当前项目

问题描述

我有两个复选框 Pass 和 FAIL 我正在解析 column1 的 csv 并添加两个复选框。

        X = 100
        Y = 71
        for item in column1[key]:
            if item != '':
                listbox.insert('end', item)
                chk_state1 = tk.IntVar()
                tk.Checkbutton(self.root, text="PASS",variable=chk_state1,font=("Arial Bold", 8),).place(x=X,y=Y)
                chk_state2 = tk.IntVar()
                tk.Checkbutton(self.root, text="FAIL",variable=chk_state2,font=("Arial Bold", 8),).place(x=X+80,y=Y)
                Y = Y +20
  1. 如何知道column1复选框的哪一行被选中
  2. 一次只能选择一个复选框

任何输入都会有所帮助,提前致谢

标签: pythontkinterlistboxtkinter.checkbutton

解决方案


对于项目 1,使用字典(项目名称作为键)来保存创建的 tkinter IntVar。然后,您可以稍后通过字典来获取每个项目的选中状态。

对于第 2 项,您可以使用Radiobutton代替Checkbutton

        X = 100
        Y = 71

        myfont = ('Arial Bold', 8)
        self.cblist = {}
        for item in column1[key]:
            if item != '':
                listbox.insert('end', item)
                chk_state = tk.IntVar(value=0)
                tk.Radiobutton(self.root, text='PASS', variable=chk_state, value=1, font=myfont).place(x=X, y=Y)
                tk.Radiobutton(self.root, text='FAIL', variable=chk_state, value=0, font=myfont).place(x=X+80, y=Y)
                self.cblist[item] = chk_state
                Y += 22

        tk.Button(self.root, text='Check', command=self.check).place(x=X, y=Y+10)

    ...

    def check(self):
        result = ('Fail', 'Pass')
        print(', '.join(f'{item}:{result[var.get()]}' for item, var in self.cblist.items()))

请注意,我添加了一个按钮来打印每个项目的选定状态。


推荐阅读