Есть ли ярлык для создания множества полигонов с помощью tkinter? - PullRequest
0 голосов
/ 18 апреля 2019

Мне нужно создать сетку из треугольников, как на этом рисунке: https://www.tilelook.com/system/tile_picture/resource/4973584/d3d_default_RE04MC017.png.

Поскольку я хочу, чтобы треугольники были кликабельными, я использую функцию холста create_polygon для рисования и функцию bind дляпрослушивание события клика.Проблема в том, что мне нужно нарисовать много треугольников, и для этого потребуется вручную вычислить вершины каждого треугольника.

Существует ли более быстрый метод, такой как рисование некоторых параллельных и пересекающихся линий и указание tkinter, что вершины являютсяпересечения линий или что-то, что не связано с вычислением вершин каждого треугольника?

1 Ответ

1 голос
/ 18 апреля 2019

Хотя вы не можете получить пересечения из 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...