从动态lis检查checkbutton的状态

2024-06-16 08:25:56 发布

您现在位置:Python中文网/ 问答频道 /正文

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

  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()

Tags: self功能列表data方式逻辑条件按钮
2条回答

所以我想出了如何处理这个问题-因为状态检查要求checkbutton的variable属性是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())

你的代码更干净

  • 您可以使用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())

相关问题 更多 >