从一个标签到另一标签的线

时间:2019-07-14 13:31:38

标签: python-3.x tkinter

我正在尝试使用tkinter重新创建以下内容:

Enigma Emualator

获取总体布局并不难(尽管我认为我这样做的效率不是很高)。我一直在浏览tkinter文档,但尚未找到在两个标签之间画线的方法(如图所示)。机器可能是每次随机生成的,所以我无法手动完成所有操作。有没有一种方法可以在不知道每个标签位置的情况下使用锚点之类的代码进行编码?

1 个答案:

答案 0 :(得分:1)

您将需要使用Canvas小部件,该小部件具有用于绘制线条和文本的方法。如果左侧和右侧的每个数字都是一个画布项目,并且基于该数字具有唯一的标记,那么在它们之间绘制一条线将非常容易。

例如,假设每个文本项都有一个标记,该标记为数字加上前缀“ l”或“ r”,具体取决于数字在左边还是在右边(例如:l1,r42等)。 / p>

每个标签的边界框将为您提供该项目的坐标。我们可以让他们做一些数学运算以获得左边缘或右边缘以及垂直中心,然后使用该信息画线。

例如:

def draw_line(canvas, n):
    ltag = "l{}".format(n)
    rtag = "r{}".format(n)

    lx0, ly0, lx1, ly1 = canvas.bbox(ltag)
    rx0, ry0, rx1, ry1 = canvas.bbox(rtag)

    ly = int((ly0+ly1)/2)
    ry = int((ry0+ry1)/2)

    tag = "line{}".format(n)
    canvas.create_line(lx1, ly, rx0, ry, fill="gray", tags=(tag,))