这是我的第一个问题,即从txt文件中的数据做基本的logplayer:
代码类似于:
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]的数组,因此每个飞机名称都会有一个类似的数组。
第二个用于简单地转换为tkinter 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])
完美!我不明白为什么,但不知怎的,我的点数组最终得到一个额外的元素,我不知道从哪里来!
感谢您的时间和耐心!
答案 0 :(得分:1)
我认为问题在于您正在使用numpy数组。这里的调用堆栈看起来像这样
如果你有np.array([0。,0.,200。,100.]),array2string()返回的字符串是'[0. 0. 100. 200。]'< / strong>即可。我怀疑它会被分裂返回 ['[','0','0','100','200。]'] 的列表,其中有一个额外的元素' [”。
如果您使用列表代替np.array(),或者您只是将numpy数组转换为列表,则代码应该可以工作,例如:
self.canvas.create_line(list(points))
虽然,如果您不需要使用numpy数组的功能,我认为从一开始就使用列表会更直接。