如何在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
相关产品推荐
相关产品推荐

