如何在Tkinter中画n段线?



我想用n个数字或段来画线(这是一条有5个段的线)。

我有:

def connect_nodes(node, node_to_connect, segments, color, canvas):
canvas.create_line(node[0], node[1], node_to_connect[0], node_to_connect[1], fill=color)

这将绘制一条没有任何线段的直线。有没有一种方法来分割这条线,使它有segments个线段?

使用dash=(pixels_to_draw, gap_in_pix)(例如:dash=(5, 1))选项create_line将无法控制一行可以分成多少段。

如果你想把一行分成指定的段,你必须画多条线,如果你想修改一行,给它一个相同的标签。

下面是一个例子。

import tkinter as tk
import math

def create_segmented_line(x, y, x1, y1, number_of_seg: int, gap: int, *args, **kwargs):
line_length = math.sqrt((x1 - x)**2 + (y1 - y)**2)
seg = line_length / number_of_seg 
n_x, n_y = (x1-x) / line_length, (y1-y) / line_length
_x, _y = x, y
dist = seg - gap/2

tag = f"segment{id(seg)}" # keep tag unique for each segment
for s in range(number_of_seg): 
canvas.create_line(_x, _y, ((dist - gap/2)*n_x) + x, ((dist - gap/2)*n_y) + y, tags=tag, *args, **kwargs)
_x, _y = ((dist + gap/2)*n_x) + x, ((dist + gap/2)*n_y) + y
dist += seg
return tag
root = tk.Tk()
canvas = tk.Canvas(root, bg="white")
canvas.pack(expand=True, fill="both")
x, y, x1, y1 = 50, 100, 150, 150
create_segmented_line(x, y, x1, y1, 5, 2)
root.mainloop()

canvas.create_line中有一个名为dash的选项。例如:

import tkinter
root = tkinter.Tk()
f = tkinter.Canvas(root,height = 200,width = 200)
f.create_line(0,0,200,200,dash=10)
f.pack()
root.mainloop()

最新更新