延长线

问题描述 投票:0回答:1

据我了解,您可以使用

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
python tkinter tkinter-canvas
1个回答
0
投票

您必须将坐标保留在列表中,然后

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()
© www.soinside.com 2019 - 2024. All rights reserved.