import Tkinter from Tkconstants import * import Canvas #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++# # GRAFIKBIBLIOTHEK grafik.py (nach einer Vorlage von Bernd Kokavecz) # # fuer Unterrichtszwecke # # Version: 1.1 (13.04.2004) # # Autoren: Jeanine Umlang, Clemens Wagner # #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++# class TBild: def __init__(self,Name): self.Bild=Tkinter.PhotoImage(file=Name) self.Breite=self.Bild.width()-2 self.Hoehe=self.Bild.height()-2 def holeBild(self): return self.Bild def holeBreite(self): return self.Breite def holeHoehe(self): return self.Hoehe class TFarbe: # Nachschlagefeld für die Umwandlung von Farbnummer in Farbee FNummernInv={ 0:"",\ 1:"#000",\ 2:"#00f",\ 3:"#0f0",\ 4:"#0ee",\ 5:"#f00",\ 6:"#ff0",\ 7:"#ccc",\ 8:"#fff"} # Nachschlagefeld für die Umwandlung Farbname ---> Farbee FNamenInv={"transparent":"",\ "schwarz":"#000",\ "blau":"#00f",\ "gruen":"#0f0",\ "tuerkis":"#0ee",\ "rot":"#f00",\ "gelb":"#ff0",\ "grau":"#ccc",\ "weiss":"#fff"} # Nachschlagefeld für die Umwandlung Farbe ---> Farbename FNamen={} for k,v in FNamenInv.items(): FNamen[v]=k # Nachschlagefeld für die Umwandlung Farbe ---> Farbnummere FNummern={} for k,v in FNummernInv.items(): FNummern[v]=k def __init__(self): self.Farbe = "#000" def holeFarbe(self): return self.Farbe def setzeFarbe(self,f): self.Farbe=f def holeFarbnummer(self): return TFarbe.FNummern[self.Farbe] def setzeFarbnummer(self,f): self.Farbe=TFarbe.FNummernInv[f] def holeFarbname(self): return TFarbe.FNamen[self.Farbe] def setzeFarbname(self,f): self.Farbe=TFarbe.FNamenInv[f] class TFigur: def __init__(self,Zb): self.X1=0 self.Y1=0 self.X2=0 self.Y2=0 self.Farbe=TFarbe() self.Fuellfarbe=TFarbe() self.DiffX=2 # Differenzpixel für die genaue Darstellung im Zeichenblattt self.DiffY=2 # Differenzpixel für die genaue Darstellung im Zeichenblattt self.ZB=Zb def holeX1Pos(self): return self.X1-self.DiffX def holeY1Pos(self): return self.Y1-self.DiffY def holeX2Pos(self): return self.X2-self.DiffX def holeY2Pos(self): return self.Y2-self.DiffY def setzePos(self,x1,y1,x2,y2): self.X1=x1+self.DiffX self.Y1=y1+self.DiffY self.X2=x2+self.DiffX self.Y2=y2+self.DiffY def posVersetzenUm(self,dx,dy): self.X1=self.X1+dx self.X2=self.X2+dx self.Y1=self.Y1+dy self.Y2=self.Y2+dy def zeigen(self): pass def loeschen(self): self.ZB.move(self.grafObj,1000,1000) def entfernen(self): self.ZB.delete(self.grafObj) class TLinie(TFigur): def __init__(self,Zb): TFigur.__init__(self,Zb) self.grafObj=self.ZB.create_line(self.X1, self.Y1,\ self.X2, self.Y2) self.ZB.config(self.grafObj,fill=self.Farbe.holeFarbe()) def zeigen(self): self.ZB.config(self.grafObj,fill=self.Farbe.holeFarbe()) self.ZB.coords(self.grafObj,self.X1,self.Y1,self.X2,self.Y2) self.ZB.aktualisieren() self.ZB.config(self.grafObj,fill=self.Farbe.holeFarbe()) self.ZB.coords(self.grafObj,self.X1,self.Y1,self.X2,self.Y2) self.ZB.aktualisieren() class TEllipse(TFigur): def __init__(self,Zb): TFigur.__init__(self,Zb) self.grafObj=self.ZB.create_oval(self.X1, self.Y1,\ self.X2, self.Y2) self.ZB.config(self.grafObj,fill=self.Fuellfarbe.holeFarbe(),outline=self.Farbe.holeFarbe()) def zeigen(self): self.ZB.config(self.grafObj,fill=self.Fuellfarbe.holeFarbe(),outline=self.Farbe.holeFarbe()) self.ZB.coords(self.grafObj,self.X1,self.Y1,self.X2,self.Y2) self.ZB.aktualisieren() class TKreis(TFigur): def __init__(self,Zb): TFigur.__init__(self,Zb) self.R=0 self.Mx=0 self.My=0 self.grafObj=self.ZB.create_oval(self.X1, self.Y1, \ self.X2, self.Y2) self.ZB.itemconfig(self.grafObj,fill=self.Fuellfarbe.holeFarbe(),outline=self.Farbe.holeFarbe()) def holeRadius(self): return self.R def setzeRadius(self,r): self.R=r self.berechneStandard() def holeMx(self): self.berechneMittelpunkt() return self.Mx def holeMy(self): self.berechneMittelpunkt() return self.My def setzeMPos(self,mx,my): self.Mx=mx+self.DiffX self.My=my+self.DiffY self.berechneStandard() def berechneStandard(self): self.X1=self.Mx-self.R self.X2=self.Mx+self.R self.Y1=self.My-self.R self.Y2=self.My+self.R def berechneMittelpunkt(self): self.Mx=self.X1+self.R self.My=self.Y1+self.R def zeigen(self): self.ZB.itemconfig(self.grafObj,fill=self.Fuellfarbe.holeFarbe(),outline=self.Farbe.holeFarbe()) self.ZB.coords(self.grafObj,self.X1,self.Y1,self.X2,self.Y2) self.ZB.aktualisieren() self.ZB.itemconfig(self.grafObj,fill=self.Fuellfarbe.holeFarbe(),outline=self.Farbe.holeFarbe()) self.ZB.coords(self.grafObj,self.X1,self.Y1,self.X2,self.Y2) self.ZB.aktualisieren() class TRechteck(TFigur): def __init__(self,Zb): TFigur.__init__(self,Zb) x = self.Farbe.holeFarbe() y = self.Fuellfarbe.holeFarbe() self.grafObj=self.ZB.create_rectangle(self.X1, self.Y1, \ self.X2, self.Y2) def zeigen(self): self.ZB.itemconfig(self.grafObj,fill=self.Fuellfarbe.holeFarbe(),outline=self.Farbe.holeFarbe()) self.ZB.coords(self.grafObj,self.X1,self.Y1,self.X2,self.Y2) self.ZB.aktualisieren() self.ZB.itemconfig(self.grafObj,fill=self.Fuellfarbe.holeFarbe(),outline=self.Farbe.holeFarbe()) self.ZB.coords(self.grafObj,self.X1,self.Y1,self.X2,self.Y2) self.ZB.aktualisieren() class TText(TFigur): def __init__(self,Zb): TFigur.__init__(self,Zb) self.Text="" self.Schriftart="*" self.Hoehe=10 self.grafObj=self.ZB.create_text(self.X1, self.Y1+(self.Hoehe/2), \ anchor="w", text=self.Text, fill=self.Farbe.holeFarbe(), font=(self.Schriftart, self.Hoehe)) def setzePos(self,x,y): self.X1=x+self.DiffX self.Y1=y+self.DiffY def setzeText(self,t): self.Text=t def setzeFont(self,art,grad): self.Schriftart=art self.Hoehe=grad def zeigen(self): self.ZB.itemconfig(self.grafObj, \ anchor="w", text=self.Text, fill=self.Farbe.holeFarbe(), font=(self.Schriftart, self.Hoehe)) self.ZB.coords(self.grafObj,self.X1, self.Y1+(self.Hoehe/2)) self.ZB.aktualisieren() class TZeichenblatt(Tkinter.Canvas): def __init__(self,bildDatei=None,hgFarbe="weiss",breite=600,hoehe=400): self.BildDatei=bildDatei self.Breite=breite self.Hoehe=hoehe self.Farbe=TFarbe() self.Farbe.setzeFarbname(hgFarbe) # Wurde ein Hintergrundbild übergeben?? if self.BildDatei!=None: #TBild-Instanz erzeugen self.Bild=TBild(self.BildDatei) #Breite und Hoehe anpassen self.Breite=self.Bild.holeBreite() self.Hoehe=self.Bild.holeHoehe() # Konstruktor der Superklasse aufrufen Tkinter.Canvas.__init__(self,bd=0,bg=self.Farbe.holeFarbe(),width=self.Breite,height=self.Hoehe) #Bild erzeugen self.create_image(0,0,anchor="nw",image=self.Bild.holeBild()) else: # Konstruktor der Superklasse aufrufen Tkinter.Canvas.__init__(self,bd=0,bg=self.Farbe.holeFarbe(),width=self.Breite,height=self.Hoehe) def holeBreite(self): return self.Breite def holeHoehe(self): return self.Hoehe def aktualisieren(self): self.update() |