example_pubsub.py 2.55 KB
# Publisher and subscriber design pattern example.

# More information about this design pattern can be found at:
# http://wiki.wxpython.org/ModelViewController
# http://wiki.wxpython.org/PubSub
import wx.lib.pubsub as ps
# The maintainer of Pubsub module is Oliver Schoenborn.
# Since the end of 2006 Pubsub is now maintained separately on SourceForge at:
# http://pubsub.sourceforge.net/

class Student():
    def __init__(self, name):
        self.name = name
        self.mood = ":|"
        self.__bind_events()
        
    def __bind_events(self):
        ps.Publisher().subscribe(self.ReceiveProject,
                                 'Set Student Project')
        ps.Publisher().subscribe(self.ReceiveGrade,
                                 'Set Student Grade')

    def ReceiveProject(self, pubsub_evt):
        projects_dict = pubsub_evt.data
        self.project = projects_dict[self.name]
        print "%s: I've received the project %s" %(self.name,
                                                   self.project)
        
    def ReceiveGrade(self, pubsub_evt):
        grades_dict = pubsub_evt.data
        self.grade = grades_dict[self.name]
        if (self.grade > 6):
            self.mood = ":)"
        else:
            self.mood = ":("
        print "%s: I've received the grade %d %s" %(self.name,
                                                    self.grade,
                                                    self.mood)
                                                    
class Teacher():
    def __init__(self, name, course):
        self.name = name
        self.course = course

    def SendMessage(self):
        print "%s: Telling students the projects" %(self.name)
        ps.Publisher().sendMessage('Set Student Project',
                                 self.course.projects_dict)
                                 
        print "\n%s: Telling students the grades" %(self.name)
        ps.Publisher().sendMessage('Set Student Grade',
                                 self.course.grades_dict)

class Course():
    def __init__(self, subject):
        self.subject = subject
        self.grades_dict = {}
        self.projects_dict = {}

# Create students:
s1 = Student("Coelho")
s2 = Student("Victor")
s3 = Student("Thomaz")

# Create subject:
cs102 = Course("InVesalius")
cs102.projects_dict = {"Coelho":"wxPython",
                       "Victor":"VTK",
                       "Thomaz":"PIL"}
cs102.grades_dict = {"Coelho":7,
                     "Victor":6.5,
                     "Thomaz":4}

# Create teacher:
andre = Teacher("Andre", cs102)




andre.SendMessage()