我需要创建一个三角形网格,如下图:https://www.tilelook.com/system/tile_picture/resource/4973584/d3d_default_RE04MC017.png。
因为我希望三角形是可单击的,所以我使用画布函数create_polygon
进行绘制,并使用bind
函数来监听单击事件。问题是我需要绘制许多三角形,这需要手工计算每个三角形的顶点。
是否有一种更快的方法,例如绘制一些平行且相交的线并告诉tkinter顶点是线的交点或不涉及计算每个三角形的顶点的东西?
答案 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创建许多多边形的快捷方式”!答案是只列出多边形,然后将它们全部绘制出来。我的代码的示例输出(您的会有所不同,因为它是随机的)看起来像: