是否有使用tkinter创建许多多边形的捷径?

时间:2019-04-17 21:35:42

标签: python tkinter

我需要创建一个三角形网格,如下图:https://www.tilelook.com/system/tile_picture/resource/4973584/d3d_default_RE04MC017.png

因为我希望三角形是可单击的,所以我使用画布函数create_polygon进行绘制,并使用bind函数来监听单击事件。问题是我需要绘制许多三角形,这需要手工计算每个三角形的顶点。

是否有一种更快的方法,例如绘制一些平行且相交的线并告诉tkinter顶点是线的交点或不涉及计算每个三角形的顶点的东西?

1 个答案:

答案 0 :(得分:1)

虽然无法从tkinter中获得交点,但可以改为使用几个for循环制作三角形,然后将其绘制在画布上。一个例子如下:

import tkinter as tk
import random

def make_triangles(row_height=60, tri_width=60, max_height=1800, max_width=1800):
    triangle_list = []
    half_width = int(tri_width/2)
    for i in range(0, max_height, row_height):
        for j in range(0, max_width, half_width):
            if j % tri_width == 0:
                triangle = (i, j-half_width, i+row_height, j, i, j+half_width)
            else:
                triangle = (i, j, i+row_height, j+half_width, i+row_height, j-half_width)
            triangle_list.append(triangle)
    return triangle_list

win = tk.Tk()
canv = tk.Canvas(win)
triangles = make_triangles()
for tri in triangles:
    canv.create_polygon(tri, fill=random.choice(["blue", "red", "green", "brown", "yellow", "black"]))
canv.pack()
win.mainloop()

在这里我们只生成许多三角形,然后将它们依次绘制到画布上(我们不必手工查找每个顶点,只需一个描述它们的公式即可)。虽然这不能解决您的确切问题,因为三角形不相交(您必须每隔一行将三角形移动半个三角形),并且三角形向左/向右而不是向上/向下,但 回答您的问题“ 是否有使用tkinter创建许多多边形的快捷方式”!答案是只列出多边形,然后将它们全部绘制出来。我的代码的示例输出(您的会有所不同,因为它是随机的)看起来像:

Resulting Triangles