我正在构建一个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 :(得分: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, ...))
....