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))
额外小提示
- 我特意加了鼠标位置的范围判断,这能避免当鼠标移出窗口时触发官方文档提到的
IndexError,让程序更健壮。 - 要确保
win是你之前通过pygame.display.set_mode()创建的窗口Surface实例,如果你的操作对象是其他Surface,替换成对应的实例名称就好。
内容的提问来源于stack exchange,提问作者notgriffin
相关产品推荐
相关产品推荐

