Problem bei Objekten und Methoden
Verfasst: Sonntag 28. Dezember 2014, 17:56
Eines gleich vorweg, ich arbeite an einer Studienarbeit in einer Gruppe, wo wir ein Bauzeitenplan als Netzplan programmieren wollen. Da aber gerade meine Teamkollegen nicht erreichbar sind, ich aber an einem Fehler verzweifle, möchte ich mich mal an dieses Forum wenden. Ich möchte aber lediglich wissen, woher der Fehler kommt, dann komm ich vll selber auf die Lösung.
Das ganze spielt sich der Canvas ab, wo man über einen Klick auf einen Butten ein Eingabefeld erzeugen kann, den man dann per drag&drop organisieren kann.
Dazu hab ich folgendes Objekt mit den Methoden geschrieben:
(Ich hab die Canvas hier Fenster genannt.)
Das ist eigentlich das ganze Objekt zur Zeit, und wenn ich es jetzt z.B. über Position.neu(100,100) aufrufen möchte und die beiden Zahlen die X/Y-Koordinaten sind, bekomme ich folgenden Fehler:
"Traceback (most recent call last):
File "C:/..., line 55, in <module>
GrafikFeld=Position.neu(100,100)
TypeError: neu() missing 1 required positional argument: 'y'"
und ich weiß nicht, wie dieser entsteht. Denn wenn ich bei Position.neu einen dritten eintrag mache erhalte ich entweder:"AttributeError: 'int' object has no attribute 'x'" bei Zahlen oder: "NameError: name 'self' is not defined" wenn ich (self,100,100) abfrage.
Wie am Anfang erwähnt, reicht mir vermutlich schon zu wissen wie dieser Fehler entsteht bzw ich erkenne ihn vermutlich einfach nicht, weil ich den Wald vor lauter Bäumen nicht sehe.
Das ganze spielt sich der Canvas ab, wo man über einen Klick auf einen Butten ein Eingabefeld erzeugen kann, den man dann per drag&drop organisieren kann.
Dazu hab ich folgendes Objekt mit den Methoden geschrieben:
(Ich hab die Canvas hier Fenster genannt.)
Code: Alles auswählen
from tkinter import *
##Grafik Oberfläche
MainWindow=Tk()
Fenster=Canvas(width=1000, height=600, bg="lightgray")
Fenster.pack(expand=YES, fill=BOTH)
##Hinzufügen-Fenster##
class HinzufügenFenster:
def start(self,x,y):
self.x=x
self.y=y
self.ID=GrafikHinzufügen=Fenster.create_rectangle(0,0,40,20,fill="blue")
##Verbindungen-Hinzufügen##
class HinzufügenVerbindung:
def start(self,x,y):
self.x=x
self.y=y
self.ID=GrafikVerbindung=Fenster.create_rectangle(40,0,80,20,fill="lightblue")
##Positionen##
class Position:
def neu(self,x,y): ##Eingabefeld erzeugen##
self.x=x
self.y=y
GrafikFeld=Fenster.create_rectangle(x,y,x+60,y+20,fill="white", width=2)
self.markiert=False
Fenster.update()
return GrafikFeld ##zum späteren abspeichern in einer Liste##
def schieben(self,x,y): ##verschieben##
self.x=x
self.y=y
Fenster.coords(self.ID,x,y,x+60,y+20)
Fenster.update()
def prüfe(self,x,y): ##Rahmen bei Cursorkontakt hervorheben##
if 0<=x-self.x<=60 and 0<=y-self.y<=20:
Fenster.itemconfig(self.ID, outline="red")
self.markiert=True
else:
Fenster.itemconfig(self.ID, outline="black")
self.markiert=False
Fenster.update()
##Erzeugen der ersten Position##
Feld=Position()
GrafikFeld=Feld.neu(100,100)
Abschnitt=1
Name="Name"
Dauer="Dauer"
Einheit="Einheit"
Feld=[GrafikFeld, Abschnitt, Name, Dauer, Einheit] ##zum Abspeichern der Eigenschaften einer Position##
Felder=[Feld] ##Alle Positionen gemeinsam abgespeichert##
##Funktionen für Keybindings##
def Ziehe(event):
for Feld in Felder:
if Position.markiert:
Position.schieben(event.x, event.y)
def Bewege(event):
for Feld in Felder:
Position.prüfe(event.x,event.y)
xPosition=event.x
yPosition=event.y
def LinksKlick(event):
if 0<=event.x<=40 and 0<=event.y<20: ##Hinzufügen von Feldern##
Position.neu(100,100)
Felder.append(Feld) ##Objekt Feld and Liste Felder anhängen##
Felder[len(Felder)]="Feld"
print(len(Felder)) ##test auf Listenlänge##
print(Felder) ##test auf Listeninhalt##
Fenster.update()
elif 40<=event.x<=80 and 0<=event.y<20: ##Hinzufügen von Verbindungen##
Fenster.update()
##Button zum Hinzufügen##
HinzufügenFenster=HinzufügenFenster()
HinzufügenFenster.start(0,0)
HinzufügenVerbindung=HinzufügenVerbindung()
HinzufügenVerbindung.start(0,40)
##Keybindings##
Fenster.bind("<B1-Motion>", Ziehe)
Fenster.bind("<Motion>", Bewege)
Fenster.bind("<Button-1>",LinksKlick)
MainWindow.update()
MainWindow.mainloop()"Traceback (most recent call last):
File "C:/..., line 55, in <module>
GrafikFeld=Position.neu(100,100)
TypeError: neu() missing 1 required positional argument: 'y'"
und ich weiß nicht, wie dieser entsteht. Denn wenn ich bei Position.neu einen dritten eintrag mache erhalte ich entweder:"AttributeError: 'int' object has no attribute 'x'" bei Zahlen oder: "NameError: name 'self' is not defined" wenn ich (self,100,100) abfrage.
Wie am Anfang erwähnt, reicht mir vermutlich schon zu wissen wie dieser Fehler entsteht bzw ich erkenne ihn vermutlich einfach nicht, weil ich den Wald vor lauter Bäumen nicht sehe.