здесь идет мой первый вопрос, я делаю базовый logplayer из данных в txt файле:
код выглядит примерно так:
for aircraft in self.logArray.itervalues():
for logLine in aircraft:
currentPoint = self.point(logLine[1], logLine[2])
currentPoint = self.win2canvas(currentPoint)
points = np.append(points, currentPoint)
print points
print np.size(points)
self.canvas.create_line(points)
points = np.array([])
Таким образом, logArray - это словарь, каждое имя содержит массив вида [time, x, y], поэтому для каждого имени воздушного судна будет такой массив.
Второй для просто преобразует в tvinter canvas coords и добавляет currentPoint в ранее существовавший (и инициализированный).
Когда он добирается до метода create_line, я получаю:
File "/home/joao/tese/workspace/ATC/src/autoATC/LogPlayer.py", line 131, in drawPath
self.canvas.create_line(points)
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 2204, in create_line
return self._create('line', args, kw)
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 2192, in _create
*(args + self._options(cnf, kw))))
_tkinter.TclError: wrong # coordinates: expected an even number, got 399
Я вручную проверил размер массива точек и действительно даже пронумерован. Поэтому я дважды проверял с помощью np.size, который вернул 398!
Я также пробовал использовать очень похожий подход к тестированию, делая:
self.canvas.create_line([123,345,234,453,23,34,45,56,67,78])
который прошел отлично! Я не понимаю, почему, но почему-то мой балл заканчивается тем, что получает дополнительный элемент, и я не знаю, откуда!
Спасибо за ваше время и терпение!
Я считаю, что проблема в том, что для этого вы используете массивы numpy. Стол вызовов выглядит так:
Если у вас есть np.array([0., 0., 200., 100.]), строка, возвращаемая array2string(), равна '[0. 0. 100. 200.]'. Я подозреваю, что тогда он получает split, возвращая список из ['[', '0.', '0.', '100.', '200.]'], который имеет один дополнительный элемент '['.
Код должен работать, если вы используете список вместо np.array() или даже если вы просто нанесли массив numpy в список, например:
self.canvas.create_line(list(points))
Хотя, я думаю, что использование списка с самого начала более прямолинейно, если вам не нужно использовать функциональность массивов numpy.