TypeError: argument 1 muss pygame.Oberfläche, nicht str, Wie kann ich das beheben?
Codiert ich dies von einem youtbe video und er schien es in Ordnung, aber wenn ich versuchte, ich bekam die Fehlermeldung unten ich bin so verwirrt und ich brauche Hilfe bitte.
#!/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()
Wenn ich das Programm starte bekomme ich die Fehlermeldung:
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
Ich bin mir nicht sicher, was das bedeutet oder wie zu beheben
DIES WAR DER FIX
Haben Sie zwei Probleme. Ihre erste ist, dass Sie setzen Sie Anführungszeichen um
back.png
, so dass es in einen string(str)
statt der Oberfläche
(pygame.Surface)
. Ihre zweite ist, dass Sie ein Tupel für die zweite
argument statt einer rect -(pygame.Rect).
fix Auf den ersten, setzen Sie sich einfach
backgroundfile (was Sie zuvor gespeichert haben, die Oberfläche so) statt
"background.png"
. Fixieren Sie die zweite, verwenden Siebackgroudfile.get_rect()
zu
Holen Sie sich die hintergrund-rect. Deine Zeile sollte sein:
screen.blit(backgroundfile, backgroundfile.get_rect()
Dies von selbst
wird nicht funktionieren, weil Sie nicht zuvor speichern backgroundfile als
surface-Objekt. Statt
backgroundfile = "back.png"
setzen
backgroundfile = pygame.image.load("back.png")
Diese zurück
Oberfläche, wenn"back.png"
gespeichert wie eine Datei im gleichen Ordner. Tun
gleiche Sache mit dem anderen geladenen Bild. All diese Dinge tun und Ihre
das Programm sollte funktionieren.
- Tipp: warum man sich die Mühe der Erstellung von Variablen zu speichern, die mit dem Namen, dann das erstellen von Bildern aus ihm heraus, wenn Sie don ' T verwenden diese Bilder? (Auch bitte Bearbeiten Sie Ihre post so, dass die Einrückung richtig ist. Dies ist von entscheidender Bedeutung für Python.)
- dies kann nur ein Ausschnitt des Programms, so wie er vielleicht über diese Bilder später (das ist meine Vermutung :P).
- meine Vermutung ist, dass
screen.blit
nimmt ein Bild als argument... - Aus der Basis von dem, was Mat gesagt, ich glaube nicht, dass Sie sollten
screen.blit("back.png", (0,0))
, sondernscreen.blit(back, (0,0))
, da Sie bereits initialisiert die variableback
als ein Bild, das Sie vorher geöffnet hatten. - Danke Jungs mir das Leben gerettet, nun habe ich die bildaufrufe up 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie zwei Probleme. Ihre erste ist, dass Sie setzen Sie Anführungszeichen um
back.png
, so dass es in einen string (str), statt eine Oberfläche (pygame.Oberfläche). Ihre zweite ist, dass Sie ein Tupel für das zweite argument statt eines rect (pygame.Rect). Zur Behebung der ersten, setzen Sie sich einfachbackgroundfile
(was Sie zuvor gespeichert haben, die Oberfläche so) statt"background.png"
. Fixieren Sie die zweite, verwenden Siebackgroudfile.get_rect()
zu bekommen, der hintergrund ist rect. Deine Zeile sollte sein:Sich von sich aus nicht arbeiten, weil Sie nicht zuvor speichern backgroundfile als ein flächiges Objekt. Statt
setzen
Diese Rückkehr wird eine Fläche, wenn "zurück.png" gespeichert wie eine Datei im gleichen Ordner. Machen Sie dasselbe mit den anderen geladenen Bild. All diese Dinge tun, und das Programm sollte funktionieren.