Re: Zugriff auf globale Variable
Verfasst: Mittwoch 22. August 2012, 08:48
"I fought the law, but law won."deets hat geschrieben:Das verletzt das Gesetz von Demeter.

Seit 2002 Diskussionen rund um die Programmiersprache Python
https://www.python-forum.de/
"I fought the law, but law won."deets hat geschrieben:Das verletzt das Gesetz von Demeter.
Code: Alles auswählen
# -*- coding: cp1252 -*-
import Tkinter as tk #verwendete GUI: Tkinter
#Klasse zur Steuerung des Spiels
class Spiel:
def __init__(self):
self.grafik = Grafik(self)
#Klasse zur Abbildung von Objekten auf dem Canvas
class Grafik:
def __init__(self, spiel):
self.spiel = spiel
#Tkinter-Interface
self.fenster = tk.Tk()
#Erzeugen eines Hintergrundobjekts
self.hintergrund=Hintergrund()
#Canvas
self.canvas = tk.Canvas(width=self.hintergrund.width,height=self.hintergrund.height)
self.canvas.pack()
print "Canvas created"
#Hintergrund
self.hintergrund = self.hintergrund.hintergrund
self.canvas.create_image(0,0,image=self.hintergrund,anchor=tk.NW)
#Zug
self.zug_X = 0
self.zug_Y = 138
self.zug = Zug(self, self.zug_X, self.zug_Y)
self.zug.fahren()
#Gleise
self.gleise = Gleise(self)
mainloop()
def mainloop():
self.fenster.mainloop()
#Klasse für die Hintergrundobjekte
class Hintergrund:
def __init__(self):
self.hintergrund = tk.PhotoImage(file = "C:/Users/Manuel/Schule/Informatik_Seminar/hintergrund2.gif")
self.width = self.hintergrund.width()
self.height = self.hintergrund.height()
class Gleise:
def __init__(self, grafik):
self.grafik = grafik
self.canvas = self.grafik.canvas
gleise = []
for i in xrange(23):
gleise.append(tk.PhotoImage(file = "C:/Users/Manuel/Schule/Informatik_Seminar/gleis.gif")
self.canvas.create_image(i*20,169,image=self.gleise[i],anchor=tk.NW)
#Klasse für den fahrenden Zug
class Zug:
def __init__(self, grafik, x, y):
self.grafik = grafik
self.canvas = self.grafik.canvas
self.x = x
self.y = y
self.zug = tk.PhotoImage(file = "C:/Users/Manuel/Schule/Informatik_Seminar/Zug.gif")
self.canvas.create_image(self.zug_X,self.zug_Y,image=self.zug,anchor=tk.NW,tags='zugtag')
def fahren(self):
self.canvas.move('zugtag',1,0)
self.x = self.x + 1
print "Bewegung um 1"
if self.x == 10:
self.canvas.after_cancel(id)
self.canvas.after(10, self.fahren)
print "hallo1"
s = Spiel() #Starten des Spiels
print "hallo2"
Code: Alles auswählen
self.gleise = tk.PhotoImage(
file="C:/Users/Manuel/Schule/Informatik_Seminar/gleis.gif")
for i in range(23):
self.canvas.create_image(
i*20, 169, image=self.gleise, anchor=tk.NW)
Code: Alles auswählen
self.gleise
Code: Alles auswählen
# -*- coding: cp1252 -*-
import Tkinter as tk #verwendete GUI: Tkinter
#Klasse zur Steuerung des Spiels
class Spiel:
def __init__(self):
self.grafik = Grafik(self)
#Klasse zur Abbildung von Objekten auf dem Canvas
class Grafik:
def __init__(self, spiel):
self.spiel = spiel
#Tkinter-Interface
self.fenster = tk.Tk()
#Erzeugen eines Hintergrundobjekts
self.hintergrund=Hintergrund()
#Canvas
self.canvas = tk.Canvas(width=self.hintergrund.width,height=self.hintergrund.height)
self.canvas.pack()
print "Canvas created"
#Hintergrund
self.hintergrund = self.hintergrund.hintergrund
self.canvas.create_image(0,0,image=self.hintergrund,anchor=tk.NW)
print "Hintergrund erstellt"
#Erzeugen eines Zugobjekts
self.zug = Zug(self)
#Start-Button
self.button = tk.Button(self.fenster, text = "Zug starten", command = "self.press")
self.button.pack()
#Gleise
self.gleise = Gleise(self)
self.mainloop()
#Mainloop außerhalb des Konstruktors (Performance)
def mainloop(self):
self.fenster.mainloop()
def press(self):
print "pressed"
#Klasse für die Hintergrundobjekte
class Hintergrund:
def __init__(self):
self.hintergrund = tk.PhotoImage(file = "Images/hintergrund2.gif")
self.width = self.hintergrund.width()
self.height = self.hintergrund.height()
#Klasse für die am Anfang vorhandenen Gleise
class Gleise:
def __init__(self, grafik):
self.grafik = grafik
self.canvas = self.grafik.canvas
self.gleise_img = tk.PhotoImage(file="Images/gleis.gif")
for i in xrange(23):
self.canvas.create_image(i*20, 169, image=self.gleise_img, anchor=tk.NW)
print "Gleis erstellt bei", i*20, 169
#Klasse für den fahrenden Zug
class Zug:
def __init__(self, grafik):
self.grafik = grafik
self.canvas = self.grafik.canvas
self.x = 0
self.y = 138
self.zug_img = tk.PhotoImage(file = "Images/Zug.gif")
self.canvas.create_image(self.x,self.y,image=self.zug_img,anchor=tk.NW,tags='zugtag')
def fahren(self):
self.canvas.move('zugtag',1,0)
self.x = self.x + 1
print "Bewegung um 1"
if self.x < 470:
self.canvas.after(10, self.fahren)
print "hallo1"
s = Spiel() #Starten des Spiels
print "hallo2"
Code: Alles auswählen
self.button = tk.Button(self.fenster, text = "Zug starten", command = self.press)
self.button.pack()
Code: Alles auswählen
def press(self):
print "pressed"
self.zug.fahren()
Code: Alles auswählen
#Klasse zur Steuerung des Spiels
class Spiel:
def __init__(self):
self.grafik = Grafik(self)
self.grafik.mainloop()
#Klasse zur Abbildung von Objekten auf dem Canvas
class Grafik:
def __init__(self, spiel):
self.spiel = spiel
#Tkinter-Interface
self.fenster = tk.Tk()
#Erzeugen eines Hintergrundobjekts
self.hintergrund=Hintergrund()
#Canvas
self.canvas = tk.Canvas(width=self.hintergrund.width,height=self.hintergrund.height)
self.canvas.pack()
print "Canvas created"
#Hintergrund
self.hintergrund = self.hintergrund.hintergrund
self.canvas.create_image(0,0,image=self.hintergrund,anchor=tk.NW)
print "Hintergrund erstellt"
#Erzeugen eines Zugobjekts
self.zug = Zug(self)
#Start-Button
#self.button = tk.Button(self.fenster, text = "Zug starten", command = "self.press")
self.button = tk.Button(self.fenster, text = "Zug starten", command = self.press)
self.button.pack()
#Gleise
self.gleise = Gleise(self)
#self.mainloop()
Habe dich nicht verstanden?Leonidas hat geschrieben:Und mit Performance hat das, entgegen der Aussage des Kommentars, gar nichts zu tun.
Nein, wie kommst du denn darauf. Das sollte man nicht machen und ich Stimme dem entsprechendem Tippgeber da absolut zu.Bonsai hat geschrieben:@Leonidas, meinst du damit, ich soll die mainloop() weiterhin bequem über den Konstruktor starten??
Ich meine damit dass dieser Kommentar:wuf hat geschrieben:Habe dich nicht verstanden?Leonidas hat geschrieben:Und mit Performance hat das, entgegen der Aussage des Kommentars, gar nichts zu tun.
Code: Alles auswählen
#Mainloop außerhalb des Konstruktors (Performance)
Code: Alles auswählen
# -*- coding: cp1252 -*-
import Tkinter as tk #verwendete GUI: Tkinter
#Klasse zur Steuerung des Spiels
class Spiel:
def __init__(self):
self.grafik = Grafik(self)
#Klasse zur Abbildung von Objekten auf dem Canvas
class Grafik:
def __init__(self, spiel):
self.spiel = spiel
#Tkinter-Interface
self.fenster = tk.Tk()
#Erzeugen eines Hintergrundobjekts
self.hintergrund=Hintergrund()
#Canvas
self.canvas = tk.Canvas(width=self.hintergrund.width,
height=self.hintergrund.height)
self.canvas.pack()
print "Canvas created"
#Hintergrund
self.hintergrund = self.hintergrund.hintergrund
self.canvas.create_image(0,0,image=self.hintergrund,anchor=tk.NW)
print "Hintergrund erstellt"
#Erzeugen eines Zugobjekts
self.zug = Zug(self)
#Start-Button
self.button = tk.Button(self.fenster, text="Zug starten",
command=self.press)
self.button.pack()
#Gleise
self.gleise = Gleise(self)
def mainloop(self):
self.fenster.mainloop()
def press(self):
print "pressed"
self.zug.fahren()
#Klasse für die Hintergrundobjekte
class Hintergrund:
def __init__(self):
self.hintergrund = tk.PhotoImage(file = "Images/hintergrund2.gif")
self.width = self.hintergrund.width()
self.height = self.hintergrund.height()
#Klasse für die am Anfang vorhandenen Gleise
class Gleise:
def __init__(self, grafik):
self.grafik = grafik
self.canvas = self.grafik.canvas
self.gleise_img = tk.PhotoImage(file="Images/gleis.gif")
for i in xrange(23):
self.canvas.create_image(i*20, 169, image=self.gleise_img,
anchor=tk.NW)
print "Gleis erstellt bei", i*20, 169
#Klasse für den fahrenden Zug
class Zug:
def __init__(self, grafik):
self.grafik = grafik
self.canvas = self.grafik.canvas
self.x = 0
self.y = 138
self.zug_img = tk.PhotoImage(file = "Images/Zug.gif")
self.canvas.create_image(self.x,self.y,image=self.zug_img,anchor=tk.NW,
tags='zugtag')
def fahren(self):
self.canvas.move('zugtag',1,0)
self.x = self.x + 1
print "Bewegung um 1"
if self.x < 470:
self.canvas.after(10, self.fahren)
def main():
spiel= Spiel()
spiel.grafik.mainloop()
main() #Starten des Spiels