2013-12-20 3 views
0

하나의 편리한 위젯에 드롭 다운 목록과 해당 버튼을 캡슐화하기 위해 파이썬 클래스를 작성하고 있는데 문제가 생겼습니다.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) 

그러나 so :

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

컴파일러는 목록이 범위를 벗어났다는 예외를 throw합니다. 추가 검사에서 Create_Menu 함수를 호출하더라도 The_Btns의 값이 빈 목록에서 변경되지 않는다는 것을 알았습니다. 그래서, 내 질문은 : 어떻게이 문제를 해결할 수 있습니까?

도움을 주시면 감사하겠습니다. 감사!

답변

0

우선 파이썬은 컴파일러가 없다는 의미에서 "컴파일"하지 않습니다. 또한 PEP8을 살펴보십시오.

귀하의 질문에 대답하려면 0에서 Num_Btns 범위를 반복하고 있습니다. 그러나 Set_Num_Btns에서 변수를 len(self.The_Btns)으로 설정하면 빈 목록이됩니다. 즉, range(0, 0)을 반복합니다. 다음과 같이 soemthing을 할 의향이 있다고 생각합니다.

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

감사합니다. 나는 관습 중 일부가 아직 침몰하지 않도록 파이썬에 처음 온 사람이다. 이게 내가 가지고있는 문제를 고쳐야 해. – Woody1193