Я не могу понять почему я не могу перемещать объект с помощью мышки на canvas python?

При вызове функции с помощью (bind('', oval)) она рисует овал на холсте canvas
с помощью аргумента event но проблема в том что другая функция не перемещает овал!

код который работает неправильно
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()

хотя если переменным давать информацию о координатах напрямую то функция move_oval перемещает овал
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()

помогите
  • Вопрос задан
  • 437 просмотров
Решения вопроса 1
@o5a
Конкретно в данном случае проверка координат не проходит потому что x1/y1 выставлено больше x2/y2
x1 = event.x + 50
y1 = event.y + 50
x2 = event.x - 50
y2 = event.y - 50
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
yupiter7575
@yupiter7575
Python программист
bind_all
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы