我想让它在运行中创建一堆复选框,当按下“提交”按钮时,查找所有复选框。目前,当按“Submit”调用select_adgroup()
时,它会为每个项目打印0
,不管它们是否被选中,除非每个复选框都被选中,在这种情况下,它为每个项目打印1
。但我希望它只打印1
选中的框。在
def search_adgroups(self):
self.adgroups = adgroup(checkBoxVal.get())
self.inc1 = 1
self.cbuts1 = []
for index, item in enumerate(self.adgroups):
self.adBoxVal = IntVar()
self.adgroup_check = (Checkbutton(self, variable=self.adBoxVal, text = item))
self.cbuts1.append(self.adgroup_check)
self.cbuts1[index].grid(row=self.inc1, sticky=W)
self.inc1 += 1
self.button2 = Button(self, text="Submit", command=self.select_adgroup)
self.button2.grid(row=self.inc1, sticky=W)
def select_adgroup(self):
for item in self.cbuts1:
print(self.adBoxVal.get())
首先,它不是
if all checked
,而是if last one checked
它将打印1s,所以总体上它只打印最后一个项目的值。这说明了很多问题。在在
for
循环之后,self.adBoxVal
的值将是最后一个值,因此当您试图用self.adBoxVal.get()
在方法中获取它的值时,只能得到最后一个1的值。在要解决这个问题,您需要将所有
self.adBoxVal
存储在一个列表中,然后对其进行迭代。在另外,对于您将来的问题,如果您发布一个不带未知函数或变量的工作代码将很好地再现错误。在
编辑:让我们用
^{pr2}$print
来表达清楚。当你在self.adBoxVal = IntVar()
下添加print(self.addBoxVal)
时,你会看到每一项都是不同的。在如果您在代码的
select_adgroup
方法中添加print (adBoxVal)
,那么您将看到它是PY_VARX
(最后一个),代码只与/一起工作。由于使用.get()
方法得到Variable Classes'值(在您的例子中是IntVar),因此需要不同的值。因此,您需要将每个元素保存在一个列表中,然后对其进行迭代。在相关问题 更多 >
编程相关推荐