【问题标题】:TypeError: must be pygame.Surface, not tuple. Python/Pygame noobieTypeError:必须是 pygame.Surface,而不是元组。 Python/Pygame 新手
【发布时间】:2014-09-09 09:12:51
【问题描述】:

你好堆栈溢出用户!

我已经编写了这段代码,它会在您单击 pygame 屏幕时绘制线条,但是当我运行该程序时,我收到一条错误消息,提示 "TypeError: must be pygame.Surface, not tuple."。我试图弄乱这个程序,但我没有运气。如果有人能帮助我找出代码有什么问题,我将不胜感激。谢谢!代码在底部。再次感谢!

import pygame
pygame.init()

pygame.display.set_mode((800,600), 0, 32)

myWindow = ((800,600),0,32)
color = (200,155,64)
points = []

while 1:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        if event.type == pygame.MOUSEBUTTONDOWN:
            points.append(event.pos)
        if len(points) > 1:
            pygame.draw.line(myWindow, color, False, points, 5)

     pygame.display.update()

【问题讨论】:

  • 您在哪一行得到错误?我认为这个myWindow = ((800,600),0,32) 应该是这个:myWindow = Surface((800,600),0,32)
  • 是的,就是那条线。谢谢!

标签: python python-2.7 pygame


【解决方案1】:

那是因为你的代码中的myWindow 是一个元组,而它应该是:

myWindow = pygame.display.set_mode((800,600), 0, 32)

【讨论】:

    【解决方案2】:

    问题是,myWindow 只是一个元组,而不是一个表面。 Pygame 无法在其上绘制任何东西。您必须将 myWindow 设置为显示器,然后在其上绘图,或者初始化另一个显示器并使 myWindow 成为纯 Surface,然后它也可以工作。

    第一种方法:

    myWindow = pygame.display.set_mode((800, 600), 0, 32)
    
    # Rest of the code goes here
    
    pygame.draw.line(myWindow, color, False, points, 5)
    pygame.display.update()
    

    第二种方法:

    screen = pygame.display.set_mode((800, 600), 0, 32)
    myWindow = pygame.Surface((800, 600)).convert()
    
    #Rest of the code goes here
    
    screen.blit(myWindow, (0, 0))
    pygame.display.update()
    

    【讨论】:

      【解决方案3】:

      我认为my window应该是这样而不是tuple请通过this

      myWindow = pygame.display.set_mode((800,600), 0, 32)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多