Как заставить объект холста tkinter перемещаться по кругу - PullRequest
0 голосов
/ 06 октября 2019

У меня есть холст, созданный рисунок:

На моем холсте я нарисовал круг:

Код для создания этого круга:

def create_circle(x, y, r, canvasName): #center coordinates, radius
    x0 = x - r
    y0 = y - r
    x1 = x + r
    y1 = y + r
    return canvasName.create_oval(x0, y0, x1, y1, outline='red')
create_circle(100, 100, 50, canvas)

Я бы хотел, чтобы изображение, созданное на холсте, точно повторяло нарисованный круг (обведите круг)по каждому пикселю. Как это возможно?

Чтобы уточнить, вот демонстрация того, что я хочу, чтобы изображение на холсте:

https://i.gyazo.com/8218fe1c82008f2ed034a78b46f787e6.mp4

1 Ответ

1 голос
/ 06 октября 2019

Вы можете использовать root.after для отправки периодического вызова, чтобы изменить координаты вашего изображения. После этого нужно просто вычислять новые x, y позиции вашего изображения в каждом вызове.

import tkinter as tk
from math import cos, sin, radians

root = tk.Tk()
root.geometry("500x500")

canvas = tk.Canvas(root, background="black")
canvas.pack(fill="both",expand=True)

image = tk.PhotoImage(file="plane.png").subsample(4,4)

def create_circle(x, y, r, canvasName):
    x0 = x - r
    y0 = y - r
    x1 = x + r
    y1 = y + r
    return canvasName.create_oval(x0, y0, x1, y1, outline='red')

def move(angle):
    if angle >=360:
        angle = 0
    x = 200 * cos(radians(angle))
    y = 200 * sin(radians(angle))
    angle+=1
    canvas.coords(plane, 250+x, 250+y)
    root.after(10, move, angle)

create_circle(250, 250, 200, canvas)
plane = canvas.create_image(450,250,image=image)

root.after(10, move, 0)

root.mainloop()

enter image description here

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