据我了解,您可以使用
create_line()
方法创建具有多个点的路径。例如,您可以编写以下内容:
points = [(10,20), (30, 40), (50,60)]
line = canvas.create_line(points)
create_line()
方法将参数展平,因此等价于:
line = canvas.create_line(10,20, 30,40, 50,60)
(为了清楚起见,我在数字对之间留了空格)。
line
变量包含该行的资源ID,但是该行到底是什么?它真的是一个多段对象吗?
如果是这样,是否可以向该对象添加另一个点而不重新创建它?比如:
canvas.extend(line, (70,80)) # I know this doesn’t work
您必须将坐标保留在列表中,然后
extend
这个列表canvas.coords(id, *new_coords)
更新线上的点。
最小工作示例:
有两个按钮使用
canvas.coords()
:
import tkinter as tk
import random
# --- functions ---
def add_point():
x = random.randint(10, 290)
y = random.randint(10, 290)
line_points.extend((x,y))
canvas.coords(line_id, *line_points)
def move_down():
for i in range(1, len(line_points), 2): # change only even items
line_points[i] += 50
canvas.coords(line_id, *line_points)
# --- main ---
root = tk.Tk()
canvas = tk.Canvas(root, bg='white', width=300, heigh=300)
canvas.pack()
button = tk.Button(root, text='ADD POINT', command=add_point)
button.pack()
button = tk.Button(root, text='MOVE DOWN', command=move_down)
button.pack()
#---
line_points = [100, 100, 200, 100]
line_id = canvas.create_line(*line_points, fill='black')
#---
root.mainloop()