Как передвигать объекты в canvas tkinter мышкой
Я пробовал функцию move, но она не подходит, так как мне нужно передвигать объекты по заданным координатам.
![]()
Для перемещения фигур на canvas по координатам используйте метод coords.
Пример (по клику по canvas перемещаем круг):
![]()
Положение объектов на Canvas (на холсте) задаётся в координатах. Эти координаты хранятся в самих объектах, созданных на холсте. Чтобы передвинуть объект, его нужно перерисовать в новом месте. Для этого нужно просто изменить его координаты. Для этого есть метод coords(). Нужно передать в него новые координаты объекта.
Одни объекты имеют простую координату x,y (такие как например Text). Но некоторые объекты могут иметь и более сложное обозначение в пространстве. Например, при создании овала нужно передать: (левая_граница_по_x, нижняя_граница_по_y, правая граница_по_x, верхняя граница_по_y).
При передвижении объекта нужно передавать тот же тип координат, что при создании, но уже для нового места, куда мы передвинули объект. Для этого нужно взять координаты положения указателя на холсте и на их основе указать новые координаты объекта в метод coords().
Чтобы это сделать мы используем метод tag_bind(). В него мы передадим:
имя_объекта который мы передвигаем;
событие (действие которое совершает пользователь и на которое реагирует наша программа);
и действие которое программа должна совершить на событие совершённое пользователем.
Делается это вот так: имя_экземпляра_класса_Canvas.tag_bind(имя_объекта, событие, действие).
Метод bind() реагирует на событие на всём холсте. Если использовать его, то привязать событие к конкретному объекту не получится. Регистрироваться событие будет на всей площади холста.
На месте «действия» лучше передавать функцию или метод. (Я приведу пример с функцией) Делать это лучше через lambda. Благодаря этому действие будет совершаться не сразу при запуске программы, а лишь тогда, когда пользователь совершит «событие» и метод coords() полноценно сработает, запустив «действие» через lambda.
Метод coords() передаёт в функцию «действия» координаты объекта в виде аргумента. Чтобы перехватить эти координаты, нужно в своей функции предусмотреть аргумент. Рекомендуется давать ему имя event
В event’е хранятся координаты указателя в момент события. Мы достаём их и на их основе генерируем координаты для нашего объекта, с учётом его размеров.
Python — перемещение объекта в PyGame
Pygame — это кроссплатформенный набор модулей Python, предназначенный для написания видеоигр. Он включает компьютерную графику и звуковые библиотеки, предназначенные для использования с языком программирования Python. Теперь зависит от воображения или необходимости разработчика, какой тип игры он / она хочет разработать с помощью этого инструментария.
В этом уроке мы узнаем, как перемещать объект так, чтобы он перемещался по горизонтали при нажатии клавиши со стрелкой вправо или влево на клавиатуре, и перемещался по вертикали при нажатии клавиши со стрелкой вверх или клавиши со стрелкой вниз.
Основная идея этого заключается в изменении координат объекта и обновлении экрана. Когда экран обновляется каждый раз, когда цвет окна заполняется исходным цветом, и формируется новый прямоугольник, поэтому при нажатии клавиш со стрелками координаты меняются, и кажется, что объект движется.
Обработка ввода и анимации¶
Взаимодействие пользователя с компьютером основано на событиях, любые действия производимые пользователем порождают события — движение мыши, нажатия клавиш, специальных кнопок. Внутри библиотеки PyGame есть инструменты для обратки событий, которые происходят внутри приложений.
Мы с вами уже знакомы с методом получения всех произошедших событий — pygame.event.get() , который возвращает события, произошедшие с последнего обращения.
Помимо событий выхода из приложения pygame.QUIT , есть множество других — например, нажатия клавиш pygame.KEYDOWN или отпускания pygame.KEYUP .
Рассмотрим взаимодействие с событиями на примере небольшой программы, в которой по нажатию клавиш показывается квадрат:
В данном блоке программа занимется обработкой нажатия клавиш. Сначала мы получаем список всех событий, после чего начинаем последовательно проверять их. Если одно из событий соответствует сигналу к завершению программы, закрываем окно. Если же это нажатие клавиши — перекрашиваем прямоугольник в белый цвет.