首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >光标跟踪Python Tkinter

光标跟踪Python Tkinter
EN

Stack Overflow用户
提问于 2019-02-18 07:29:50
回答 1查看 877关注 0票数 0

我正在创建一个国际象棋,我遇到的第一个问题是实现一个创建代码,该代码将允许我获得鼠标的当前位置,并在该鼠标坐标中打印鼠标图像,然后基本上循环执行,直到用户这样做。现在它只是在计时器上。请随意用另一个gif替换图像。这只是代码的一部分

我不知道还能试什么。我基本上重新排列了代码,希望这就是问题所在,但事实并非如此。

代码语言:javascript
运行
复制
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)

如果有任何其他方式或方法让图像跟随光标,请启发我谢谢也请告诉我,如果我没有解释清楚或遗漏了几个位

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-18 09:49:14

您不应该使用winfo_pointerxy(),因为它返回相对于屏幕原点(屏幕的左上角)的鼠标位置。在画布上使用bind('<Motion>', callback)来跟踪鼠标相对于画布的位置(这样就不需要使用.after())。此外,您不应该在每次要更新图像时都重新创建图像,而应改为更新图像的坐标。

以下是示例代码:

代码语言:javascript
运行
复制
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()

和输出:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54738671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档