2013-12-20 3 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

Смежные вопросы