Canvas Objekt nicht verschiebbar!
Verfasst: Freitag 16. Februar 2007, 22:08
Hi,
so nach ausgiebigen Ausprobieren und nachlesen, muss ich nun ins Forum schreiben ich komm einfach nicht weiter!
Probemstellung:
ich habe in der Datei grafik.py mehrer Canvasobjekte erstellt, Rechteck, Ellipse... aus diesen Objekten haben ich mir auf einer Zeichenfläche ein neues Objekt zusammen gebastelt, z.B.: nen Auto^^ oder was auch immer
dieses neue Objekt packe ich in eine Class und möchte diese nun mit Attributen bestücken so wie meine anderen Canvas Objekte, soweit so gut, nun folgendes Problem da die neue Class nicht nur ein Objekt ist sondern aus mehreren (Rechtecken, Ellipsen) besteht kann ich es nicht mehr verschieben!
Hier meine Quelltexte:
grafik.py
hier die Objekte:
und nu meine neue Class:
und hier die Fehlermeldung:
so nach ausgiebigen Ausprobieren und nachlesen, muss ich nun ins Forum schreiben ich komm einfach nicht weiter!
Probemstellung:
ich habe in der Datei grafik.py mehrer Canvasobjekte erstellt, Rechteck, Ellipse... aus diesen Objekten haben ich mir auf einer Zeichenfläche ein neues Objekt zusammen gebastelt, z.B.: nen Auto^^ oder was auch immer
dieses neue Objekt packe ich in eine Class und möchte diese nun mit Attributen bestücken so wie meine anderen Canvas Objekte, soweit so gut, nun folgendes Problem da die neue Class nicht nur ein Objekt ist sondern aus mehreren (Rechtecken, Ellipsen) besteht kann ich es nicht mehr verschieben!
Hier meine Quelltexte:
grafik.py
Code: Alles auswählen
def setPos(self,ax1,ay1,ax2,ay2):
"""
Vor.: das Grafik-Objekt ist initialisiert, ax1,ay1,ax2,ay2 sind Integer
Erg.: die linke obere Ecke ist auf ax1,ay1, die rechte untere Ecke auf
ax2, ay2 gesetzt
"""
self.X1=ax1
self.Y1=ay1
self.X2=ax2
self.Y2=ay2
Code: Alles auswählen
def pos_versetzen_um(self,dx,dy):
"""
Vor.: das Grafik-Objekt ist initialisiert, dx, dy sind Integer
Erg.: das Grafik-Objekt ist um dx in der Waagerechten und um
dy in der Senkrechten verschoben
"""
self.X1=self.X1+dx
self.X2=self.X2+dx
self.Y1=self.Y1+dy
self.Y2=self.Y2+dy
Code: Alles auswählen
class Linie(Figur):
"""
/* Klasse Linie
"""
def __init__(self):
Figur.__init__(self)
x = self.getFarbe()
self.grafObj=Canvas.Line(Figur.ZF,(self.X1, self.Y1),(self.X2, self.Y2)\
, {"fill": x})
def zeigen(self):
self.grafObj.config(fill=self.getFarbe())
self.grafObj.coords(((self.X1,self.Y1),(self.X2,self.Y2)))
class Ellipse(Figur):
"""
/* Klasse Ellipse
"""
def __init__(self):
Figur.__init__(self)
x = self.getFarbe()
y = self.getFuellfarbe()
self.grafObj=Canvas.Oval(Figur.ZF, (self.X1, self.Y1), \
(self.X2, self.Y2), {"outline": x, "fill": y})
def zeigen(self):
self.grafObj.config(fill=self.getFuellfarbe(),outline=self.getFarbe())
self.grafObj.coords(((self.X1,self.Y1),(self.X2,self.Y2)))
class Rechteck(Figur):
"""
/* Klasse Rechteck
"""
def __init__(self):
Figur.__init__(self)
x = self.getFarbe()
y = self.getFuellfarbe()
self.grafObj=Canvas.Rectangle(Figur.ZF, (self.X1, self.Y1), \
(self.X2, self.Y2), {"outline": x, "fill": y})
def zeigen(self):
self.grafObj.config(fill=self.getFuellfarbe(),outline=self.getFarbe())
self.grafObj.coords(((self.X1,self.Y1),(self.X2,self.Y2)))
und nu meine neue Class:
Code: Alles auswählen
class Auto(Kreis, Buntrechteck):
def __init__(self,farbe):
self.a=Buntrechteck(50, 200, 150, 300, farbe)
self.b=Buntrechteck(10, 240, 200, 300, farbe)
self.k1=Kreis(50,300,30, farbe)
self.k2=Kreis(150,300,30,farbe)
def setPos(self,ax1,ay1,ax2,ay2):
pass
def verschieben_um(self, dx,dy):
self.pos_versetzen_um(dx,dy)
self.zeigen()
def langsam_wandern_um(self,dx):
i =0
while i< abs(dx):
if dx<0:
delta = -2
else: delta = 2
self.verschieben_um(delta,0)
i+=2
time.sleep(0.1)
meinZeichenblatt.refresh()#damit man etwas sieht
Code: Alles auswählen
>>> a.langsam_wandern_um(10)
Traceback (most recent call last):
File "<pyshell#60>", line 1, in <module>
a.langsam_wandern_um(10)
File "D:\Daten\auto.py", line 62, in langsam_wandern_um
self.verschieben_um(delta,0)
File "D:\Daten\auto.py", line 45, in verschieben_um
self.pos_versetzen_um(dx,dy)
File "D:\Daten\grafik.py", line 184, in pos_versetzen_um
self.X1=self.X1+dx
AttributeError: Auto instance has no attribute 'X1'
>>>