TypeError:参数1必须是pygame.Surface,而不是str如何修复?

时间:2012-12-29 16:19:00

标签: python linux pygame raspberry-pi

我用youtbe视频对此进行编码,他似乎做得很好,但是当我尝试时,我在底部收到错误消息,我很困惑,我需要帮助。

#!/usr/bin/env python

import pygame, sys

from pygame.locals import *

pygame.init()

screen = pygame.display.set_mode((370, 572), 0, 32)

backgroundfile = "back.png"
mousefile = "mouse.png"

back = pygame.image.load(backgroundfile).convert()
mouse = pygame.image.load(mousefile).convert_alpha()

while True:

    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()

    #Now we have initialized everything lets start with the main part

    screen.blit("back.png", (0,0))

    pygame.display.flip()

当我运行程序时,我收到错误:

Traceback (most recent call last):
  File "Tutorial 5 First game.py", line 26, in <module>
  screen.blit("back.png", (0,0))
TypeError: argument 1 must be pygame.Surface, not str 

我不确定这意味着什么或如何修复

这是固定

  

你有两个问题。你的第一个就是你引用了引号   back.png,将其变为字符串(str)而不是表面   (pygame.Surface)。你的第二个是你为第二个放了一个元组   参数而不是矩形(pygame.Rect).要修复第一个,简单地说   backgroundfile(以前保存表面的内容)而不是   "background.png"。要解决第二个问题,请使用backgroudfile.get_rect()   得到背景的矩形。你的行应该是:

     

screen.blit(backgroundfile, backgroundfile.get_rect()这本身   将无法正常工作,因为您以前没有将后台文件保存为   表面物体。而不是

     

backgroundfile = "back.png"

     

backgroundfile = pygame.image.load("back.png")这将返回一个   表面,如果"back.png"保存为同一文件夹中的文件。做吧   与其他加载图像相同的事情。做所有这些事情和你的   程序应该有效。

1 个答案:

答案 0 :(得分:1)

你有两个问题。首先是你在back.png周围加上引号,使它成为一个字符串(str)而不是一个表面(pygame.Surface)。你的第二个是你为第二个参数而不是rect(pygame.Rect)放置一个元组。要解决第一个问题,只需将backgroundfile(之前保存表面的内容)放在"background.png"上即可。要解决第二个问题,请使用backgroudfile.get_rect()来获取背景的矩形。你的行应该是:

screen.blit(backgroundfile, backgroundfile.get_rect()

这本身不起作用,因为您之前没有将backgroundfile保存为表面对象。而不是

backgroundfile = "back.png"

backgroundfile = pygame.image.load("back.png")

如果将“back.png”保存为同一文件夹中的文件,则会返回一个曲面。对其他加载的图像执行相同的操作。做所有这些事情和你的程序应该有效。