zunächst einmal nutze ich meinen ersten Thread um mein Projekt kurz vorzustellen. Ich bin zurzeit Schüler in der (bald) 12. Klasse eines Gymnasiums und schreibe meine Facharbeit über ein von mir selbst programmiertes Pythonspiel.
Und gerade dieses bereitet mir öfter mal sehr viel Kopfzerbrechen, weshalb ich wohl noch öfter hier mit einigen Fragen im Gepäck auftauchen werde.
Ich will klarstellen, dass ich von euch nicht mein Spiel programmiert haben will, ich stoße bloß leider mit Python zu oft an meine Grenzen, weshalb ich immer mal wieder kleine Unterstützung brauche, ich bin natürlich trotzdem für jegliche Tipps offen!
Nun zu meinem ersten, wahrscheinlich recht simplen Problem:
Ich erstelle zum Starten des Spiels ein Globales objekt einer Klasse, welches später mal alle anderen Klassen verwalten soll. Nun möchte ich auf dieses Objekt in einer Methode einer anderen Klasse zugreifen, was so aber nicht zu funktionieren scheint.
Die Fehlermeldung lautet:
Hier der dazugehörige Code:Traceback (most recent call last):
File "C:\Users\Manuel\Schule\Informatik_Seminar\Spiel.py", line 72, in <module>
s = Spiel()
File "C:\Users\Manuel\Schule\Informatik_Seminar\Spiel.py", line 8, in __init__
self.g = Grafik()
File "C:\Users\Manuel\Schule\Informatik_Seminar\Spiel.py", line 24, in __init__
self.z.fahren()
File "C:\Users\Manuel\Schule\Informatik_Seminar\Spiel.py", line 59, in fahren
self.c = s.self.g.getCanvas()
NameError: global name 's' is not defined
Code: Alles auswählen
from Tkinter import *
from threading import *
from time import *
import thread
class Spiel:
def __init__(self):
self.g = Grafik()
class Grafik:
def __init__(self):
fenster = Tk()
self.h=Hintergrund()
self.c = Canvas(width=self.h.getHintergrundWidth(),height=self.h.getHintergrundHeight())
self.c.pack()
self.hintergrund = self.h.getHintergrund()
self.c.create_image(0,0,image=self.hintergrund,anchor=NW)
print "Canvas created"
self.z=Zug()
self.zug = self.z.zugSetzen(self.c)
self.c.create_image(0,138,image=self.zug,anchor=NW,tags='zugtag')
#thread.start_new_thread(self.fahren(),(1000, ))
self.z.fahren()
self.gleise = [0,1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,18,19,20,21,22,23]
for i in range(23):
self.gleise[i] = PhotoImage(file = "C:\Users\Manuel\Schule\Informatik_Seminar\gleis.gif")
self.c.create_image(i*20,169,image=self.gleise[i],anchor=NW)
fenster.mainloop()
def getCanvas(self):
return self.c
class Hintergrund:
def __init__(self):
self.hintergrund1 = PhotoImage(file = "C:\Users\Manuel\Schule\Informatik_Seminar\hintergrund2.gif")
def getHintergrund(self):
return self.hintergrund1
def getHintergrundWidth(self):
self.hwidth = self.hintergrund1.width()
return self.hwidth
def getHintergrundHeight(self):
self.hheight = self.hintergrund1.height()
return self.hheight
class Zug(Thread):
def __init__(self):
Thread.__init__(self)
def fahren(self):
self.c = s.self.g.getCanvas()
for x in range(100):
self.c.move('zugtag',5,0)
time.sleep(100)
print "Bewegung um 5"
def zugSetzen(self,canvas):
zug1 = PhotoImage(file = "C:\Users\Manuel\Schule\Informatik_Seminar\Zug.gif")
return zug1
print "hallo1"
s = Spiel()
print "hallo2"
self.c = s.self.g.getCanvas()" Hier möchte ich das Objekt von ganz unten Benutzen.
Vielen Dank schonmal für zügige Antworten,
Bonsai