我正在创建一个国际象棋,而我遇到的第一个问题是实现一个创建代码,该代码将使我能够获取鼠标的当前位置并在该鼠标坐标中打印该鼠标图像,并基本上循环播放直到用户这样说。现在,它只是一个计时器。随时用另一个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) 在(6)显示图像 获取坐标(7) 在(7)显示图像 获取坐标(8) 在(8)显示图像 获取坐标(9) 在(9)显示图像 获取坐标(10) 在(10)显示图像
如果还有其他方法可以使图像跟随光标,请多指教,谢谢 还请告诉我我是否解释不清楚或错过了一些机会
答案 0 :(得分:1)
您不应使用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()
输出: