【问题标题】:deselect the checkbox using the listbox item in tkinter python and print the current item of listbox使用 tkinter python 中的列表框项目取消选中复选框并打印列表框的当前项目
【发布时间】:2021-11-10 15:12:08
【问题描述】:

我有两个复选框 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. 一次只能选择一个复选框

任何输入都会有所帮助,在此先感谢

【问题讨论】:

  • 对于第 2 项,为什么不为每个项目使用一个复选框:检查通过,否则检查失败。或者使用单选按钮而不是复选框。对于第 1 项,建议使用字典来存储这些 tkinter 变量 (IntVar()) 并使用 item 作为键。
  • 不明白能不能详细点

标签: python tkinter listbox tkinter.checkbutton


【解决方案1】:

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

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

【讨论】:

  • 我试过这段代码,在打印中我得到的是所有项目而不是那个通过或失败行的特定项目
  • @Piu check() 只是获取每个项目的选中状态的示例,您可以对其进行修改以过滤掉项目,例如仅显示 PASS 项目。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-20
  • 1970-01-01
相关资源
最近更新 更多