E.3.2 Verbindungsindikator-Widgetklasse

#!/usr/users2/diplom/hans/python/python/bin/python
# -------------------------------------------------------------
# Projekt : Digitale Bibliotheken Projekt
# Uni-Frankfurt/M, Professur Telematik und
# verteilte Systeme, Prof. O. Drobnik
# Diplomarbeit, Matzen,Hans, 1997
# Dateiname : ampel.py
# Datum : 03.11.1997
# letzte Änderung : 11.11.1997
# Autor : Hans Matzen, 1997, Frankfurt/M, Deutschland
# Sprache : Python v1.4
# Beschreibung : Eine Ampelklasse zur Benutzung in graphischen
# Oberflaechen, die mit Tk realisiert wurde
# Anmerkungen :
# -------------------------------------------------------------
 
# imports
from Tkinter import *
import time
 
 
class ampel:
 
    #
    # Konstruktor
    #
    def __init__(self,master,width):
        # Variablen setzen
        self.master=master
        self.height=width*3
        self.width=width
        # Ampel aufbauen
        self.create_everything()
 
    #
    # Zeichnet die Ampel
    #
    def create_everything(self):
        self.pic=Canvas(self.master,background="Black",width=self.width,height=self.height,borderwidth=0)
        self.pic.create_rectangle(1,1,self.width+1,self.height+1,fill="Grey")
     
        ypos1 = self.width
        ypos2 = 2 * self.width
        ypos3 = 3 * self.width
 
        xwidth=ypos1
        if self.height<xwidth:
            xwidth=self.height
 
        xpos1=1
        xpos2=self.width
 
        self.pic.create_oval(xpos1, 1,xpos2,ypos1,tag="l1",fill="black")
        self.pic.create_oval(xpos1,ypos1,xpos2,ypos2,tag="l2",fill="black")
        self.pic.create_oval(xpos1,ypos2,xpos2,ypos3,tag="l3",fill="black")
 
 
    #
    # Ein Wrapper fuer die Standar-Tk-Pack-Function
    #
    def pack(self,args=""):
        self.pic.pack(side=RIGHT)
     
    #
    # Ein Wrapper fuer die Standar-Tk-Bind-Function
    #
    def bind(self,event,func):
        self.pic.bind(event,func)
 
    #
    # Ermittelt unter Angabe der Koordinaten
    # auf welches Ampellicht geklickt wurde
    #
    def which(self,x,y):
        if y>2*self.width:
            self.switch(1)
            return 3
        elif y>self.width:
            self.switch(2)
            return 2
        else:
            self.switch(3)
            return 1
         
     
    #
    # Schaltet die Ampel um
    # num =0 --> Ampel aus
    # num =1 --> Ampel gruen
    # num =2 --> Ampel gelb
    # num =3 --> Ampel rot
    #
    def switch(self,num):
        if num<0 or num>3:
            return -1
        else:
            tagstr="l"+str(num)
            if num==0:
                col1="black"
                col2="black"
                col3="black"
            if num==1:
                col1="green"
                col2="black"
                col3="black"
 
            if num==2:
                col1="black"
                col2="yellow"
                col3="black"
         
            if num==3:
                col1="black"
                col2="black"
                col3="red"
 
            self.pic.itemconfig("l1",fill=col3)
            self.pic.itemconfig("l2",fill=col2)
            self.pic.itemconfig("l3",fill=col1)
 
            return 0