Как разрешить IndexError: index (x) выходит за пределы оси 0 с размером (y) в wx Python? - PullRequest
0 голосов
/ 06 февраля 2020

Здесь я пытаюсь отобразить анимацию челюсти. Выполнение кода дает ошибку при вызове события OnClicked ().

def OnClicked(self, e):
    print("ok")
    self.ani = animation.FuncAnimation(self.figure_animation, self.animate , init_func=self.init, interval=0.1,
                                       blit=True)

def init(self):  # only required for blitting to give a clean slate.
    x = self.mat_px[0]
    y = self.mat_py[0]
    self.jaw_outline.set_data(x, y)
    return self.img, self.jaw_outline

def animate(self, i):
    # update the data
    x = self.mat_px[i]
    y = self.mat_py[i]
    self.jaw_outline.set_data(x, y)
    poa = self.axes_animation.scatter(self.h2_POA_pos[i], self.K2_POA_pos[i], color='red', s=150)
    jaw_area_fill = self.axes_animation.fill_between(x, y, 0, facecolor=[(254 / 255, 157 / 255, 111 / 255)])

    return self.img, self.jaw_outline, jaw_area_fill, poa

Рассмотрим, если длина self.mat_px равна 80, тогда я получаю, что этот «индекс 80 выходит за пределы оси 0 с размером 80». "ошибка постоянно в консоли pycharm. Я получаю безостановочные ошибки, как показано ниже.

  • IndexError: индекс 80 выходит за границы для оси 0 с размером 75.
  • IndexError: индекс 81 выходит за границы для оси 0 с размер 75.
  • IndexError: индекс 82 выходит за пределы оси 0 с размером 75.
  • и т. д.

И если я установлю blit как False, то я не получаю никакой ошибки, но это не дает мне должного результата. Пожалуйста, помогите мне в решении этой проблемы.

1 Ответ

0 голосов
/ 06 февраля 2020

Я рекомендую использовать оператор % (по модулю) (см. Двоичные арифметические операции c ), чтобы ограничить индекс диапазоном self.mat_px соответственно self.mat_py:

x = self.mat_px[i % len(self.mat_px)]
y = self.mat_py[i % len(self.mat_py)]
...