Создание дублирующих строк с использованием Tkinter - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь создать программу, подобную рисованию, которая позволяет рисовать одну линию, которая, в свою очередь, создает сетку из дублирующих линий, образуя базовую тесселяционную структуру c в качестве конечного результата. Я написал основную c программу с использованием Tkinter, однако у меня нет большого опыта использования Tkinter или даже python в этом отношении. В настоящее время я могу нарисовать две линии, которые расположены рядом, но также связаны в каждой новой точке. Я знаю, что мой код, вероятно, менее звездный (на самом деле, он, вероятно, довольно плохой).

РЕДАКТИРОВАТЬ: Это не позволит мне вставлять изображения в мои сообщения, , так что вот ссылка на обобщенный c, если он небрежный, пример того, что я хочу, чтобы программа производила.

ВТОРОЕ РЕДАКТИРОВАНИЕ: я немного поработал над своим кодом и немного улучшил его, но я все еще продолжаю возникли проблемы с подключением экземпляров второй и третьей строк к исходной строке:

from tkinter import *
from tkinter import ttk

lastx, lasty = 0, 0
points = [(100,100),(300,100),(300,300),(100,300)]
c=1

def xy(event):
    global lastx, lasty
    lastx, lasty = event.x, event.y

def xy(event):
    global lastx2, lasty2
    lastx2, lasty2 = event.x+200, event.y+200


def addLine(event):
    global lastx, lasty
    canvas.create_line((lastx, lasty, event.x, event.y))
    lastx, lasty = event.x, event.y

def newLine1(event):
    global lastx2, lasty2
    canvas.create_line((lastx2, lasty2, event.x-200, event.y))
    lastx2, lasty2 = event.x, event.y

def newLine2(event):
    global lastx2, lasty2
    canvas.create_line((lastx2, lasty2, event.x, event.y-200))
    lastx2, lasty2 = event.x, event.y

def LineCreate(event):
    addLine(event)
    newLine1(event)
    newLine2(event)

root = Tk()
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)

canvas = Canvas(root)
canvas.grid(column=0, row=0, sticky=(N, W, E, S))
canvas.bind("<Button-1>", xy)
canvas.bind("<B1-Motion>", LineCreate)
canvas.create_polygon(points, outline='#f11',
            fill='#1f1', width=2)


root.mainloop()

СТАРЫЙ КОД из tkinter import * из tkinter import ttk

lastx, lasty = 0, 0
points = [(100,100),(300,100),(300,300),(100,300)]
c=1

def xy(event):
    global lastx, lasty
    lastx, lasty = event.x, event.y

def xy(event):
    global lastx2, lasty2
    lastx2, lasty2 = event.x+50, event.y+50


def addLine(event):
    global lastx, lasty
    canvas.create_line((lastx, lasty, event.x, event.y))
    lastx, lasty = event.x, event.y

def addLine(event):
    global lastx2, lasty2
    canvas.create_line((lastx2, lasty2, event.x+50*c, event.y))
    lastx2, lasty2 = event.x+5, event.y+5

root = Tk()
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)

canvas = Canvas(root)
canvas.grid(column=0, row=0, sticky=(N, W, E, S))
canvas.bind("<Button-1>", xy)
canvas.bind("<B1-Motion>", addLine)


root.mainloop()

1 Ответ

0 голосов
/ 10 апреля 2020

Насколько я понимаю, вы хотите повторить рисунок, нарисованный в области polygon (на самом деле вы можете использовать rectangle вместо polygon), ниже приведен пример:

def xy(event):
    global lastx, lasty
    lastx, lasty = event.x, event.y

def LineCreate(event):
    global lastx, lasty
    # draw the base pattern
    canvas.create_line((lastx, lasty, event.x, event.y))
    # duplicate the pattern
    repeat = 5
    for row in range(repeat):
        for col in range(repeat):
            if row or col: # don't draw on the original again
                canvas.create_line((lastx+col*200, lasty+row*200, event.x+col*200, event.y+row*200))
    lastx, lasty = event.x, event.y # save the last point
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...