单击

时间:2017-10-25 08:13:54

标签: python-2.7 tkinter

我使用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

1 个答案:

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