使用 tkinter python 中的列表框项目取消选择复选框并打印列表框的当前项目

deselect the checkbox using the listbox item in tkinter python and print the current item of listbox

我有两个复选框通过和失败 我正在解析 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 Checkbox选中了哪一行
  2. 一次只能选中一个复选框

提前致谢,任何意见都会有所帮助

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

对于第 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()))

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