Python - 在函数中改变类变量值

时间:2013-12-20 08:07:41

标签: python-2.7 user-interface kivy

我正在构建一个python类,将一个下拉列表及其按钮封装在一个方便的小部件中,我遇到了一个问题。

class DropDownMenu(DropDown):

def __init__(self, **kwargs):
    super(DropDownMenu, self).__init__(**kwargs)
    self.The_Menu = DropDown()
    self.The_Btns = []
    self.Num_Btns = 0

def Set_Num_Btns(self):
    self.Num_Btns = len(self.The_Btns)

def Create_Menu(self, Btn_Names):

    # Populate List Size Property
    if (self.Num_Btns == 0):
        self.Set_Num_Btns()

    # Add Buttons to the Drop-Down
    for i in range(0, self.Num_Btns):
        self.The_Btns.append(Button(text = Btn_Names[i], size_hint_y = None, height = 20))
        self.The_Menu.add_widget(self.The_Btns[i])

它编译得很好,当我尝试创建一个下拉菜单时,我得到了我想要的东西:

self.File_Menu = DropDownMenu()
self.File_Menu.Create_Menu(self.File_Menu_Names)
self.add_widget(self.File_Menu)

但是,如果我尝试将任何按钮绑定到任何东西,就像这样:

self.File_Menu.The_Btns[0].bind(on_release = self.Insert_File_Menu.open)

编译器抛出一个异常,说列表超出范围。在进一步检查时,我意识到即使我正在调用Create_Menu函数,也不会从空列表中更改The_Btns的值。所以,我的问题是:我该如何解决这个问题?

任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

首先,python不会在你引用的意义上“编译”,也没有编译器。另外,请查看PEP8

要回答您的问题,您正在迭代范围0到Num_Btns。但是,在Set_Num_Btns中,您将变量设置为len(self.The_Btns),这是一个空列表,即您正在迭代range(0, 0)。我怀疑你的意思是这样做:

for name in Btn_Names:
    self.The_Btns.append(Button(text=name, ...))
    ....