我正在尝试使用一些可以移动和旋转的项目制作画布,为此,我有修改坐标的功能,但是我在移动对象时遇到了麻烦。我正在尝试使用coords函数来更改每个对象的坐标。
引发错误的当前代码位是:
count = 1
for part in self._createdpartlist:
self.coords(part, self._partlist[count].coordinates)
count += 1
self是我创建的Canvas对象。 withpartpartlist包含画布中已创建部件的id(所有4个边多边形),partlist是具有以[(x1,y1),(x2,y2),(x3,y3)形式返回的坐标的对象列表,(x4,y4)]
然而,当我尝试运行它时,我得到了错误;
_tkinter.TclError: bad screen distance "340)]"
(在这种情况下340是y4坐标)
我完全不知道屏幕距离不好意味着什么,并且无法弄清楚什么是错误的,或者我是否使用了coords功能不正确。
非常感谢任何帮助
编辑:当我创建一个仅包含此文件的新文件时,我收到此错误。
from tkinter import *
coordinates = [(330,230), (350,230), (350,340), (330,340)]
new_coords = [(340,245), (340,260), (400,260), (400,245)]
c = Canvas()
shape = c.create_polygon(coordinates)
c.coords(shape, new_coords)
错误出现“245)]”而不是“340)]”在这个例子中
答案 0 :(得分:1)
你能试试吗?我不会在移动设备上试用它。
import itertools
try:
import Tkinter as tk
except ImportError:
import tkinter as tk
# from itertools recipes: https://docs.python.org/2/library/itertools.html
def flatten(list_of_lists):
"""Flatten one level of nesting"""
return itertools.chain.from_iterable(list_of_lists)
coordinates = [(330,230), (350,230), (350,340), (330,340)]
new_coords = [(340,245), (340,260), (400,260), (400,245)]
c = tk.Canvas()
shape = c.create_polygon(coordinates)
c.coords(shape, *flatten(new_coords))
如果有效,请尝试:
for i, part in enumerate(self._createdpartlist):
self.coords(part, *flatten(self._partlist[i+1].coordinates))
答案 1 :(得分:0)
我在尝试Pypy3 5.5.0-alpha时遇到了_tkinter.TclError: bad screen distance
。
将坐标列表更改为元组有帮助。