При создание овала на холсте canvas я могу перемещать овал, но когда я создаю второй овал я не могу перемещать первый овал только второй?

Когда я создаю овал то я могу его перемещать с помощью курсора мыши, но создавая второй я не могу перемещать первый овал! мне нужно чтобы я мог перемещать все созданные овалы.

вот код который перемещает каждый созданный овал
import tkinter as tk
import sqlite3 as sql

root = tk.Tk()

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

def oval(event):# рисует овал
    global x1
    global y1
    global x2
    global y2
    global shape
    x1 = event.x - 50
    y1 = event.y - 50
    x2 = event.x + 50
    y2 = event.y + 50
    #x1 = 0
    #y1 = 0
    #x2 = 100
    #y2 = 100
    shape = canvas.create_oval(x1, y1, x2, y2)

def move_oval(event):# перемещает овал
    global x1
    global y1
    global x2
    global y2
    if (x1 <= event.x ) and (x2 >= event.x) and (y1 <= event.y) and (y2 >=event.y):# проверка находится ли курсор мышки                                                                             
        x1 = event.x - 50                                                          #там где находится овал чтобы переместить его
        y1 = event.y - 50
        x2 = event.x + 50
        y2 = event.y + 50
        canvas.coords(shape, x1, y1, x2, y2)  

canvas.bind('<Button-3>', oval)
canvas.bind('<B1-Motion>', move_oval)

root.mainloop()
  • Вопрос задан
  • 80 просмотров
Решения вопроса 1
@o5a
Можно так
def move_oval(event):# перемещает овал
    canvas = event.widget
    # находим ближайший объект
    obj = canvas.find_closest(event.x, event.y)[0]
    # для оценки направления движения возьмем центр объекта
    x1,y1,x2,y2 = canvas.coords(obj)
    cx = (x2+x1)//2
    cy = (y2+y1)//2
    canvas.move(obj, event.x-cx, event.y-cy)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы