You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pygame+Tkinter项目中将鼠标坐标偏移对齐窗口左上角

问题原因
  • 你混用了tkinter与pygame两套窗口体系:代码中创建的tkinter根窗口默认处于隐藏状态,实际响应交互的显示窗口是pygame创建的,root.winfo_rootx()、root.winfo_rooty()获取的是隐藏tk窗口的左上角坐标,和pygame窗口的实际位置完全不匹配,因此计算出的相对坐标会出现严重偏移。
  • 不需要额外引入tkinter实现需求,pygame本身已经封装了获取鼠标相对于当前窗口坐标的原生接口,调用更简单也更稳定。
修复后代码
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
dot_image = pygame.image.load("dot.png").convert_alpha()
# 时钟实例提到循环外,避免重复创建对象影响性能
clock = pygame.time.Clock()
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            # 直接退出程序,避免后续代码执行抛出异常
            exit()
    # 直接获取相对于pygame窗口左上角的鼠标坐标
    x, y = pygame.mouse.get_pos()
    screen.fill([0, 64, 64])
    screen.blit(dot_image, (x, y))
    pygame.display.update()
    clock.tick(60)

如果你确实需要通过全局鼠标坐标自行计算相对位置,可以使用pygame 2.0+支持的pygame.mouse.get_global_pos()获取全局鼠标坐标,再通过pygame.display.get_window_position()获取pygame窗口的全局左上角坐标,二者相减就能得到相对坐标,效果和直接调用pygame.mouse.get_pos()完全一致。

内容的提问来源于stack exchange,提问作者Plide

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 02:15:02