2013-12-20 53 views
0

我正在構建一個python類,將一個下拉列表及其按鈕封裝在一個方便的小部件中,並且遇到了一個問題。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的值不會從空列表中更改。所以,我的問題是:我該如何解決這個問題?

任何幫助,將不勝感激。謝謝!

回答

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, ...)) 
    .... 
+0

感謝您的幫助。我是python的新手,所以一些約定還沒有沉沒。這應該解決我遇到的問題 – Woody1193