2016-07-29 3 views
0

Я пытаюсь создать список с девятью подписями. Этот суб-листы должны быть в состоянии хранить девять кнопок, к сожалению, она возвращает следующую ошибку:Динамическое создание кнопок и сохранение в задачах массива 2d

File "C:\PythonLearning\Testing2dArrayOfButtons.py", line 18, in <module> 
BButtons[count][gridX*(y)+x].grid(row=y, column=x) 
IndexError: list index out of range 

Я считаю, что проблема заключается в count, сначала я попытался с помощью переменной y для for цикла, но того Бесполезного Не работай вообще. При использовании чисел 0-8 вместо переменной счетчика она не вызывает ошибку, но также не динамически размещает кнопки в формате 2d-массива.

from Tkinter import * 

gridX = 9 
gridY = 9 

BButtons=[[] for i in range(9)] 

root = Tk() 

count = -1 #introduced count because 'y variable' was not working 
for y in range(gridY): 
    count += 1 
    for x in range(gridX): 
     print count 
     BButtons[count].append(Button(root, text="X", height = 2, width = 4)) 
     print count 
     print BButtons 
     BButtons[count][gridX*(y)+x].grid(row=y, column=x) #gridX*(y)+x is the formula used to obtain the nested button location 
     print BButtons          #the buttons[][].grid is setting the button positions on the scrin to a grid 

print BButtons 

root.mainloop() 

ответ

1
BButtons[count][gridX*(y)+x] 

gridX имеет значение 9, что делает gridX*(y)+x довольно большое количество, как y увеличивается. Это вызовет IndexError.

BButtons[y][x] должно работать.

+0

Спасибо, я не знаю, как я запутался в этом. Элемент gridX * (y) + x изначально использовался для выделения текста кнопкам и по какой-то идиотской причине я думал, что это сработает. – Aquacruelty

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