"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()
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