2015-01-01 5 views
0

Мне нужна базовая помощь с моим кодом. Я пытаюсь создать новый список со значением для переменной self.add_programs в каждый раз, когда я использую переменную program_controls, чтобы добавить список кнопок для хранения в массивах.ошибка python: IndexError: индекс индекса за пределами диапазона

Когда я пытаюсь это:

self.add_programs = list() 
self.rows += 1 

program_controls = xbmcgui.ControlButton(
    int(position_start), 
    int(position_top), 
    int(program_width), 
    int(program_height), 
    program_title, 
    focusTexture = self.path + self.button_focus, 
    noFocusTexture = self.path + self.button_nofocus, 
    textColor ='0xFFFFFFFF', 
    focusedColor ='0xFF000000' 
) 
self.add_programs[self.rows].append(ProgramControls(program_controls, program)) 

Это дает мне ошибку: индекс списка из диапазона

Ошибка прыгают на этой линии:: IndexError

self.add_programs[self.rows].append(ProgramControls(program_controls, program)) 

Вот код:

class ProgramControls(object): 
    def __init__(self, control, program): 
     self.control = control 
     self.program = program 



class MyClass(xbmcgui.WindowXML): 

    def __init__(self): 
     self.add_programs = list() 
     self.rows = 0 

    def GoDown(self): 
     self.add_programs = list() 
     self.rows += 1 

     program_controls = xbmcgui.ControlButton(
      int(position_start), 
      int(position_top), 
      int(program_width), 
      int(program_height), 
      program_title, 
      focusTexture = self.path + self.button_focus, 
      noFocusTexture = self.path + self.button_nofocus, 
      textColor ='0xFFFFFFFF', 
      focusedColor ='0xFF000000' 
     ) 
     self.add_programs[self.rows].append(ProgramControls(program_controls, program)) 
    prog_button = [elem.control for elem in self.add_programs] 


    if self.programs == False: 
     self.addControls(prog_button) 

Не могли бы вы помочь мне, как я могу хранить кнопки в массивах каждый раз, когда добавляю список кнопок?

Если это возможно, сообщите, пожалуйста.

+0

Я не совсем понимаю, что вы пытаетесь сделать, но что, если вы вообще не указали список? Как 'self.add_programs.append (ProgramControls (program_controls, program))' – Kevin

+0

'self.add_programs' короче' self.rows'; например, рассмотрим: arr = [1]; arr [2] '... Нет' arr [2] ', поэтому вы получите эту ошибку .... Вы можете использовать' self.add_programs [self.rows - 1] ', но я не проверьте свой код слишком тщательно ... – Carpetsmoker

+0

Попробуйте 'self.add_programs.append (...)'. – Javier

ответ

3

Если вы делаете mylist[3].append(), вы пытаетесь добавить в список 4-й элемент в своем mylist. Вы также можете написать это как (mylist[3]).append(), чтобы сделать это более понятным.

Если вы хотите добавить в mylist, вам нужно просто использовать mylist.append(). Если вы хотите установить его по определенному индексу, вы можете использовать list.insert(index, item); однако, если список не длиннее index, он будет просто добавлен в конце.

Если вы хотите использовать специальные ключи, используйте вместо dict():

mydict = {} 
dict[3] = my_item 

В вашем случае, я бы просто использовать self.add_programs.append() однако.

+0

@ThornWiggers благодарит вас за вашу помощь. Я хочу использовать 'self.add_programs.append()', чтобы добавить список кнопок, но как я могу прочитать список кнопок для хранения в массивах, нужно ли мне что-то использовать, как это «list.insert (index, пункт) '? –

+0

'list.insert()' действительно для тех случаев, когда у вас уже есть список, например 'a = [0,1,2,4,5,6]', и хотел бы вставить что-то в определенную позицию: 'a.insert (3, 3) 'дает' a = [0,1,2,3,4,5,6] '. Я не совсем уверен, что вы подразумеваете под «readd список кнопок для хранения в массивах», но «insert» очень редко требуется. –

+0

@ThornWiggers жаль, что я хочу, чтобы я вставлял элементы в массивы, поэтому я могу использовать '.append', чтобы открыть список массивов, которые я сохранил. Нужно ли использовать 'list.insert()'? не могли бы вы показать мне пример с моим кодом того, что я должен использовать? жаль, что я запутался, как использовать 'list.insert (index, item)' с моим кодом, чтобы заставить его работать. –