我正在创建一个国际象棋,我遇到的第一个问题是实现一个创建代码,该代码将允许我获得鼠标的当前位置,并在该鼠标坐标中打印鼠标图像,然后基本上循环执行,直到用户这样做。现在它只是在计时器上。请随意用另一个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)
如果有任何其他方式或方法让图像跟随光标,请启发我谢谢也请告诉我,如果我没有解释清楚或遗漏了几个位
发布于 2019-02-18 09:49:14
您不应该使用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()
和输出:
https://stackoverflow.com/questions/54738671
复制相似问题