python - Tkinter create_line问题: wrong # coordinates: expected an even number

标签 python tkinter

这是我的第一个问题,我从 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] 类型的数组,因此每个飞机名称都会有一个类似的数组。

第二个简单地转换为 tkinter Canvas 坐标并将 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 数组。这里的调用堆栈看起来像这样

  1. Tkinter.py,第 2160 行,位于 创建行返回 self._create('line', args, kw)
  2. Tkinter.py,第 2148 行,在 _create
    *(args + self._options(cnf, kw))))
  3. numeric.py,第 1424 行,在 array_str 中 返回数组2字符串(a, 最大线宽,精度, 抑制_小,'',“”,str)
  4. arrayprint.py,第 307 行,位于 array2string 返回 lst

如果你有 np.array([0., 0., 200., 100.]) array2string() 返回的字符串是 '[ 0. 0. 100. 200.]'。我怀疑它会被分割返回 ['[', '0.', '0.', '100.', '200.]'] 列表,其中有一个额外的元素 ' ['.

如果您使用列表代替 np.array() 或者即使您只是将 numpy 数组转换为列表,您的代码应该可以工作,例如:

self.canvas.create_line(list(points))

不过,我认为如果您不需要使用 numpy 数组的功能,那么从一开始就使用列表会更直接。

关于python - Tkinter create_line问题: wrong # coordinates: expected an even number,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6470485/

相关文章:

python - 对从 np.where 获得的索引应用偏移量

python - Django 在哪里存储其测试数据库

python - 如何在tkinter中设置行与列之间的间距

python - 读取文件 tkinter 中的行

python - 我的代码在 Tkinter 上运行有什么问题?

python - Pyautogui 在导入时更改窗口大小

python - 比较两个不同大小的 numpy 数组的最佳方法

python - 使用Python在Mysql数据库中插入一个值

python - 有没有办法同时执行多个函数,但是从列表中执行?

python - 使用 tkinter 和 openpyxl 导入 Excel 工作表