Отслеживание курсора Python Tkinter - PullRequest
0 голосов
/ 18 февраля 2019

Я создаю шахматы, и первая проблема, с которой я столкнулся, - это создание кода, который позволит мне получить текущее положение мыши и напечатать это изображение мыши в координатах этой мыши и, в основном, зацикливать его, пока пользовательговорит так.Прямо сейчас это только по таймеру.Не стесняйтесь заменить изображение другим GIF.Это только часть кода

Я не знаю, что еще попробовать.Я в основном реорганизовал код, надеясь, что это была проблема, но это не так.

def Mousecoords():

    pointxy = root.winfo_pointerxy()


    print(str(pointxy))

    canvas.create_image(pointxy[0], pointxy[1], image=whiteKing.pieceImage)
    time.sleep(0.3)


ok = 0


while ok <= 10:
    root.after(500, Mousecoords)
    ok += 1

Прямо сейчас, код делает то, что он получает фактические координаты курсора в реальном времени и после него.делал это в течение всего времени таймера, он отображает изображения, однако я пытаюсь добиться получения координат и распечатки изображений одновременно.

прямо сейчас, то, что он делает:

получает координаты (1) получает координаты (2) получает координаты (3) получает координаты (4) получает координаты (5) получает координаты (6) получает координаты (7) получает координаты (8) получает координаты (9) получаеткоординаты (10)

печатает изображение (1-10 одновременно)

вместо этого я хочу сделать следующее:

получает координаты (1) отображает изображение в(1) получает координаты (2) отображает изображение в (2) получает координаты (3) отображает изображение в (3) получает координаты (4) отображает изображение в (4) получает координаты (5) отображает изображение в (5) получает координаты (6) дисплays изображение в (6) получает координаты (7) отображает изображение в (7) получает координаты (8) отображает изображение в (8) получает координаты (9) отображает изображение в (9) получает координаты (10) отображает изображение в (10)

, если за курсором следует какой-либо другой способ или метод изображения, просим вас просветить меня, спасибо. Также, пожалуйста, скажите, если я не объяснил четко или пропустил несколько бит

1 Ответ

0 голосов
/ 18 февраля 2019

Не следует использовать winfo_pointerxy(), так как он возвращает положение мыши относительно источника экрана (верхний левый угол экрана).Используйте bind('<Motion>', callback) на холсте, чтобы отслеживать положение мыши относительно холста (тогда вам не нужно использовать .after()).Кроме того, вам не следует воссоздавать изображение каждый раз, когда вы хотите обновить изображение, вместо этого вы должны обновить координату изображения.

Ниже приведен пример кода:

from tkinter import *
from PIL import Image, ImageTk

def Mousecoords(event):
    pointxy = (event.x, event.y) # get the mouse position from event
    print(pointxy)
    canvas.coords(cimg, pointxy) # move the image to mouse postion

root = Tk()
img = ImageTk.PhotoImage(file='_red.png')
canvas = Canvas(width=400, height=200)
cimg = canvas.create_image(200, 100, image=img)
canvas.pack()
canvas.bind('<Motion>', Mousecoords) # track mouse movement
root.mainloop()

Ивыход:

enter image description here

...