problem mit einem programm

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
johannes2007
User
Beiträge: 7
Registriert: Dienstag 10. Dezember 2013, 20:07

Dienstag 10. Dezember 2013, 20:23

hallo
ich habe eine frage zu einem Programm das ich aus einem buch hab
könntet ihr vielleicht sagen was das Problem ist und wie ich es beheben kann
(das Programm ist noch nicht fertig aber es sollte funktionieren sagt das buch)

Code: Alles auswählen

from tkinter import *
import random
import time

class Spiel:
    def _init_(self):
        self.tk = Tk()
        self.tk.title("Herr Strichmann rennt zum Ausgang")
        self.tk.resizable(0, 0)
        self.tk.wm_attributes(-"topmost", 1)
        self.canvas = Canvas(self.tk, width=500, height=500, \
                             highlightthickness=0)
        self.canvas.pack()
        self.tk.update()
        self.canvas_height = 500
        self.canvas_width = 500
        self.bg = PhotoImage(file="Hintergrund.gif")
        w = self.bg.width()
        h = self.bg.height()
        for x in range(0, 5):
            for y in range(0, 5):
                self.canvas.create_image(x * w, y * h, \
                                         image=self.bg, anchor='nw')
                                         
        self.sprites = []
        self.rennen = True
    def Hauptschleife(self):
        while 1:
            if self.rennen == True:
                for sprite in self.sprites:
                    sprite.move()
                self.tk.update_idletask()
                self.tk.update()
                time.sleep(0.01)

s = Spiel()
s.Hauptschleife()
das war da Programm
folgende fehlermeldung

Traceback (most recent call last):
File "C:\Strichmännchen\strichmännchen.py", line 37, in <module>
s.Hauptschleife()
File "C:\Strichmännchen\strichmännchen.py", line 29, in Hauptschleife
if self.rennen == True:
AttributeError: 'Spiel' object has no attribute 'rennen'

vielen dank schon mal im vorraus :D :D :)
Zuletzt geändert von Anonymous am Dienstag 10. Dezember 2013, 20:25, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
BlackJack

Dienstag 10. Dezember 2013, 20:28

@johannes2007: Das Attribut gibt es nicht weil `_init_()` nicht ausgeführt wird und das wird nicht ausgeführt weil es `__init__()` heissen müsste.

Davon mal abgesehen ist das mit `update()` keine gute Idee. Wenn Du eine GUI schreibst, dann lass Dich besser auf ereignisbasierte Programmierung ein, so wie das halt vorgesehen ist, und versuche nicht gewaltsam lineare Programmabläufe da reinzukloppen. Die Hauptschleife stellt Tk.
Sirius3
User
Beiträge: 10009
Registriert: Sonntag 21. Oktober 2012, 17:20

Mittwoch 11. Dezember 2013, 00:58

@johannes2007: wenn Du das mit »__init__« repariert hast, wirst Du bei »-"topmost"« hängen bleiben, weil das Negative von Strings gibt es nicht.

Du solltest es vermeiden »from ... import *« zu schreiben. Dadurch müllst Du Dir im Normalfall Deinen Namensraum voll. Du kannst nur schwer nachvollziehen, aus welchem Modul welcher importe Name kommt, es kann zu Namenskonflikten kommen, allein schon, weil vielleicht eine Bibliothek in einer neueren Version vorliegt. Das »Tk«-Objekt innerhalb von »__init__« zu erzeugen, ist bei Ereignisorientierter Programmierung blöd, weil die Event-Schleife ja außerhalb des Spiel-Objekts aufgerufen wird. Die »\« sind an allen Stellen überflüssig und erzeugen nur potentielle Fehlerquellen. Statt »while 1:« schreibt man üblicherweise »while True:«. Auf »True« braucht man nicht explizit testen, es reicht ein »if self.rennen:«.
johannes2007
User
Beiträge: 7
Registriert: Dienstag 10. Dezember 2013, 20:07

Mittwoch 11. Dezember 2013, 15:11

danke
Das Leben ist kein Ponyhof
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

Mittwoch 11. Dezember 2013, 17:39

Scheint ja kein besonders gutes Buch zu sein.
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.

Wie man Fragen richtig stellt
Antworten