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

pygame.Surface.get_at()报错:descriptor不适用于tuple对象如何解决?

解决Pygame中get_at()调用的TypeError问题

嘿,我一眼就揪出问题所在啦!你碰到的TypeError,核心原因是你错误地直接调用了pygame.Surface类的get_at方法,而不是用你实际创建的Surface实例来调用它。

错误原因解析

pygame.Surface.get_at()是一个实例方法——简单说就是它必须依附于一个具体的Surface对象(比如你的窗口win)才能使用,而不能直接通过pygame.Surface这个类本身去调用。你现在的写法相当于把类当成了实例来用,自然会抛出“descriptor 'get_at' 不适用于tuple对象”的错误。

修正后的代码

把你的代码改成这样就能正常运行了:

mouse_pos = pygame.mouse.get_pos()
# 先判断鼠标位置是否在窗口范围内,避免触发IndexError
if 0 <= mouse_pos[0] < win.get_width() and 0 <= mouse_pos[1] < win.get_height():
    if win.get_at(mouse_pos) != (0,0,0,255):
        x, y = mouse_pos
        pygame.draw.rect(win, (0,0,0), (x, y, 3, 3))

额外小提示

  1. 我特意加了鼠标位置的范围判断,这能避免当鼠标移出窗口时触发官方文档提到的IndexError,让程序更健壮。
  2. 要确保win是你之前通过pygame.display.set_mode()创建的窗口Surface实例,如果你的操作对象是其他Surface,替换成对应的实例名称就好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 15:43:14