Antworten auf deine Fragen:
Neues Thema erstellen

Python: Fehlermeldung: NameError: name 'Actor' is not defined

Ombra

Nicht mehr ganz neu hier

Hallo zusammen,

ich lerne gerade mit dem Buch "Spiele mit Python" von DK kleine Spiele zu programmieren. Ich bin gerade bei meinem ersten Spiel "Obstattacke".
Folgender Code:
Code:
apple = Actor("apple")

def draw():
    screen.clear()
    apple.draw()

und es kommt die Fehlermeldung:

Traceback (most recent call last):
File "...Dokumente\Python-Spiele\Obstattacke\obst.py", line 1, in <module>
apple = Actor("apple")
NameError: name 'Actor' is not defined

Vielleicht kann mir jemand helfen!
Danke!

edit:
Mit folgender Codezeile ganz am Anfang kann man das Problem lösen:
Code:
from pgzero.builtins import Actor, animate, keyboard
 
Zuletzt bearbeitet:

Welpe

Noch nicht viel geschrieben

Schau mal in deinen Importen nach. Die Klasse Actor muss am Anfang des Dokumentes importiert werden wenn sie nicht innerhalb des Dokuments erstellt wurde.

Also sowas z.B.:
from ... import Actor
 

Welpe

Noch nicht viel geschrieben

Wenn ich mir die Links von draupnir anschaue, sollte die Fehlermeldung damit weg sein:

Code:
import pgzrun

apple = pgzrun.Actor("apple")
 
def draw():
    screen.clear()
    apple.draw()
 

draupnir

Moderator

Teammitglied
Läuft doch, nur anders als erwartet. Ich nutze Python halt nur als Sprache für Extentions zb. in Scribus ...

Also, schreibe Deine Programm in der IDLE oder einem Texteditor mit der Endung .py

Dann kannst Du in der IDLE diese Datei öffnen und mit RUN > MODUL starten.




(und dann frage ich mich mal wieder, warum gibt es für Anfänger keine brauchbaren Einsteigertutorials, die auch den aktuellen Stand der Software abdecken? Denn wie man im Beispiel sehr schön sehen kann, heissen die Befehl doch etwas anders als im Buch.)
 

Welpe

Noch nicht viel geschrieben

Windows 11 kenne ich nicht. Ich habe nur Windows 10 in einer Virtuellen Maschine....

Wenn du Python installiert hast, kannst du eine Eingabeaufforderung starten und dort "pip freeze" eingeben. Dann bekommst du alle Module angezeigt, die du installiert hast. Da sollte dann auch pygame stehen, ist das so?
 

Welpe

Noch nicht viel geschrieben

Unter Windows 10. Module installiert mit pip install pygame und pip install pgzero

Dann dein Code ohne Fehlermeldung.
Code:
from pgzero.builtins import Actor, screen
 
apple = Actor("apple")
 
def draw():
    screen.clear()
    apple.draw()
 

Welpe

Noch nicht viel geschrieben

Eine Rezession zu Deinem Buch "Spiele mit Python" von DK, gefunden bei Ama....

3,0 von 5 Sternen Nicht für Kinder geeignet
Rezension aus Deutschland vom 2. November 2020
Verifizierter Kauf
Python installieren, dann pygames - dass hier die Versionen eine wesentliche Rolle spielen, dass wird nicht beschrieben (auch nicht auf den genannten Hilfeseiten im Netz-der-Netze).

pygames 2 ist noch in der Beta, die Version <2 ist aber NICHT kompatibel mit der aktuellen Version von Python. Also muss man (nicht das Kind, sondern der Vater mit wenig Linux-Knowhow) eine niedrigere Version von Python installieren, die Umgebungsvariable anpassen und dem Kind in vielen Schritten zur Seite stehen.

Ein No-Go aus meiner Sicht.

Schade, denn das Buch macht einen guten Eindruck.

Keine Kaufempfehlung

Das Buch scheint für Anfänger nicht unbedingt die beste Wahl zu sein. Auch andere Meinungen sind nicht unbedingt besser. Vielleicht liegt das Problem auch bei nicht kompatiblen Versionen zwischen pygame und Python. Wie schon erwähnt habe ich von pygame keinen Plan und ohne dein Buch vor der Nase zu haben wird auch das improvisieren fast unmöglich.
 

Welpe

Noch nicht viel geschrieben

Ich habe da etwas hinbekommen, allerdings nur unter Linux und Windows 10 denn 11 habe ich nicht.

Die Module installieren, falls noch nicht vorhanden:
Code:
pip install --upgrade pygame
Code:
pip install --upgrade pgzrun

Sind diese beiden Sachen installiert, öffnest du deine obst.py mit deiner IDE (Visual Studio Code z.B.)
Dort änderst du deinen Code wie folgt ab:
Code:
import pgzrun

apple = Actor("apple")
 
def draw():
    screen.clear()
    apple.draw()

pgzrun.go()

Die erste Zeile in deiner Datei muß "import pgzrun" sein, die letzte Zeile der Datei "pgzrun.go()"
Zwischen diese beiden Zeilen kommt dein Code.

Das ("apple") in Zeile drei deines Codes ist dein Bild, welches du anzeigen möchtest. Dazu mußt du im selben Verzeichnis, in dem auch die obst.py liegt, einen neuen Ordner mit dem Namen "images" anlegen. In diesen kommt dann dein Bild hinein, welches du anzeigen möchtest. Ich habe dort ein Bild mit dem Namen apple.jpg gespeichert.

Um dein Script zu starten, mußt du die Datei das erste mal im Terminal ausführen denn aus der IDE bzw VSCode herraus funktioniert das nicht.
Unter Windows ist das die Eingabeaufforderung bzw PowerShell. Dort wechselst du in dein Verzeichnis mit "cd Documents\Python-Spiele\Obstattacke\ und startest dann dein Script mit "pgzrun obst.py"

Nun sollte sich ein Fenster öffnen und dein Bild angezeigt werden. Das solltest du als angehender Programmierer hinbekommen. Komischerweise funktioniert nun auch das starten des Scripts, nachdem es einmal im Terminal aufgerufen wurde, auch aus VSCode herraus.
 

Ombra

Nicht mehr ganz neu hier

Hallo!
Ich habe jetzt einige Probleme beheben können.
Diesen Code habe ich im Dokument noch ergänzt und die Fehlermeldungen sind verschwunden.
(Ist zwar aktuell ein anderes Spiel, aber auch dort hatte ich das Problem)

Code:
from random import randint
import pgzrun
from pgzero.builtins import Actor, animate, keyboard

# Importieren der Pygame
import pygame
# initialisieren von Pygame
pygame.init()

WIDTH = 800
HEIGHT = 600

screen = pygame.display.set_mode([WIDTH, HEIGHT])

Dafür kommt jetzt was anderes...

Traceback (most recent call last):
File "c:\Users\m\OneDrive\Dokumente\Python-Spiele\ballonfahrt\balloon2.py", line 131, in <module>
pgzrun.go()
File "C:\Users\m\AppData\Local\Programs\Python\Python310\lib\site-packages\pgzrun.py", line 31, in go
run_mod(mod)
File "C:\Users\m\AppData\Local\Programs\Python\Python310\lib\site-packages\pgzero\runner.py", line 113, in run_mod
PGZeroGame(mod).run()
File "C:\Users\m\AppData\Local\Programs\Python\Python310\lib\site-packages\pgzero\game.py", line 217, in run
self.mainloop()
File "C:\Users\m\AppData\Local\Programs\Python\Python310\lib\site-packages\pgzero\game.py", line 225, in mainloop
self.reinit_screen()
File "C:\Users\m\AppData\Local\Programs\Python\Python310\lib\site-packages\pgzero\game.py", line 73, in reinit_screen
self.mod.screen.surface = self.screen
AttributeError: 'pygame.Surface' object has no attribute 'surface'
PS C:\Users\m\OneDrive\Dokumente\Python-Spiele\ballonfahrt> & C:/Users/m/AppData/Local/Programs/Python/Python310/python.exe c:/Users/m/OneDrive/Dokumente/Python-Spiele/ballonfahrt/balloon2.py
pygame 2.1.2 (SDL 2.0.18, Python 3.10.2)
Hello from the pygame community. https://www.pygame.org/contribute.html
Traceback (most recent call last):
File "c:\Users\m\OneDrive\Dokumente\Python-Spiele\ballonfahrt\balloon2.py", line 131, in <module>
pgzrun.go()
File "C:\Users\m\AppData\Local\Programs\Python\Python310\lib\site-packages\pgzrun.py", line 31, in go
run_mod(mod)
File "C:\Users\m\AppData\Local\Programs\Python\Python310\lib\site-packages\pgzero\runner.py", line 113, in run_mod
PGZeroGame(mod).run()
File "C:\Users\m\AppData\Local\Programs\Python\Python310\lib\site-packages\pgzero\game.py", line 217, in run
self.mainloop()
File "C:\Users\m\AppData\Local\Programs\Python\Python310\lib\site-packages\pgzero\game.py", line 225, in mainloop
self.reinit_screen()
File "C:\Users\m\AppData\Local\Programs\Python\Python310\lib\site-packages\pgzero\game.py", line 73, in reinit_screen
self.mod.screen.surface = self.screen
AttributeError: 'pygame.Surface' object has no attribute 'surface'

Vielen Dank für eure Hilfe!
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.611
Beiträge
1.538.341
Mitglieder
67.524
Neuestes Mitglied
BSKGA
Oben