我使用python 2.7和Tkinter(Tkinter的新手:)) 我有一个包含20个复选框列表的UI 一旦我点击一个复选框,就会检查所有复选框,而不是一个。 在下面的代码中,您将看到2行(一次带#) 使用# - 单击复选框时,只检查一个是否正常 没有# - 当点击一个时,所有都被检查 问题是,我想知道每个复选框的状态,如果有或没有,我必须定义var = Intvar以便"得到"它的地位 有什么建议吗? 提前致谢 以下是相关的def
def suites_checkbox_create(self):
ExcelWorkBook1 = open_workbook(config.UI_Suites_Location + 'STD_SUITES.xlsx', on_demand=True)
First_Sheet1 = ExcelWorkBook1.sheet_by_index(0)
plushight = 110
suitesList=[]
self.CheckboxList=[]
for name in (First_Sheet1._cell_values):
if name[3] == "General Name":
continue
else:
suitesList.append(name[3])
for index, name in enumerate(suitesList):
self.var=IntVar
#self.CheckboxList.append(Checkbutton(self.app, text=name)) # using this, i can check once checkbox a time
self.CheckboxList.append(Checkbutton(self.app, text=name, variable=self.var)) # with this, once i check once checkbox, all checkboxes(20) are bing checked
self.CheckboxList[index].place(y=plushight)
plushight += 20
答案 0 :(得分:1)
发生这种情况的原因是因为您已为所有Checkbutton
小部件提供了variable
属性的相同变量。
这意味着只要其中一个Checkbutton
窗口小部件被勾选self.var
,就会得到1
的值,这意味着所有Checkbutton
窗口小部件的值都是1
等同于他们被选中。
简而言之,无论何时勾选它,它都会更新所有其他值的值,因为它们具有用于存储其值的相同变量。
请参阅以下示例中的内容:
from tkinter import *
root = Tk()
var = IntVar()
for i in range(10):
Checkbutton(root, text="Option "+str(i), variable = var).pack()
root.mainloop()
要解决此问题,您需要为每个Checkbutton
使用不同的变量,如下所示:
from tkinter import *
root = Tk()
var = []
for i in range(10):
var.append(IntVar())
Checkbutton(root, text="Option "+str(i), variable = var[i]).pack()
root.mainloop()