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