从动态列表中检查checkbutton的状态

时间:2016-12-12 22:56:26

标签: python tkinter

我有一个基于查询生成的检查按钮列表 - 它根据搜索条件填充,并且可以通过第二次搜索和/或清除列表来销毁。我还将checkbutton值存储在列表中(todoList)。我正在努力的地方是如何在"提交"中检查是否选中了支票按钮。功能。以下是包含todoList操作生成检查按钮的方式。我在逻辑中肯定遗漏了一些东西,我可以动态地获取值,但我没有看到它,需要一些帮助。

  while data:
    specno = data[0]
    fname = data[1]
    lname = data[2]
    self.todoList.append(specno)
    #self.var1 = IntVar()
    n = len(self.buttonList)
    lx = Checkbutton(self.listFrame,
                     text=self.todoList[n],
                     variable=self.todoList[n],
                     onvalue = 1,
                     offvalue = 0)
    ni = n
    self.buttonListNum.append(ni)
    lx.grid(row=n, column=0, sticky='NW')
    self.buttonList.append(lx)
    data = cursor.fetchone()

2 个答案:

答案 0 :(得分:1)

所以我想出了如何处理这个 - 因为状态检查要求checkbutton的变量属性是IntVar(),StrVar()等,我所做的是将变量设置为IntVar()然后追加那些与我的buttonList []和todoList []列表具有相同索引的单独列表,以便我稍后可以使用下面显示的函数checkStatus检查状态。

def add(self):
  self.removeCheckButton()
  entry = self.entryBox.get()
  self.entryBox.delete(0, END)
  search = ("%QUERY%")
  cursor.execute(search)
  data = cursor.fetchone()
  while data:
    specno = data[0]
    fname = data[1]
    lname = data[2]
    self.todoList.append(specno)
    var = IntVar()
    n = len(self.buttonList)
    lx = Checkbutton(self.listFrame,
                     text=self.todoList[n],
                     variable= selvar,
                     onvalue = 1,
                     offvalue = 0)
    ni = n
    self.buttonListNum.append(ni)
    self.varList.append(var)
    lx.grid(row=n, column=0, sticky='NW')
    self.buttonList.append(lx)
    data = cursor.fetchone()


def checkStatus(self):
  for i in self.buttonListNum:
    print(self.varList[i].get())

答案 1 :(得分:0)

您的代码但更干净

  • 您可以使用for代替while,然后您不需要data = cursor.fetchone()
  • 您不需要self.buttonListNum
  • 您不必在名称中添加Listbuttonsvars更具可读性。如果您希望名称中包含List,则首选button_listvar_list

for n, data in enumerate(cursor):
    specno = data[0]
    var = IntVar()

    lx = Checkbutton(self.listFrame,
                     text=specno,
                     variable=var,
                     onvalue=1,
                     offvalue=0)
    lx.grid(row=n, column=0, sticky='NW')

    self.todoList.append(specno)
    self.buttons.append(lx)
    self.vars.append(var)

并检查变种:

def check_status(self):
    for i, var in enumerate(self.vars):
        print(i, var.get())