# Copyright (c) 2007, Enthought, Inc. # License: BSD Style. # list_notifier.py -- Example of zero-parameter handlers for an object # containing a list #--[Imports]-------------------------------------------------------------------- from traits.api import HasTraits, List #--[Code]----------------------------------------------------------------------- class Employee: pass class Department( HasTraits ): employees = List(Employee) #--[Example*]------------------------------------------------------------------- def a_handler(): print "A handler" def b_handler(): print "B handler" def c_handler(): print "C handler" fred = Employee() mary = Employee() donna = Employee() dept = Department(employees=[fred, mary]) # "Old style" name syntax # a_handler is called only if the list is replaced: dept.on_trait_change( a_handler, 'employees' ) # b_handler is called if the membership of the list changes: dept.on_trait_change( b_handler, 'employees_items') # "New style" name syntax # c_handler is called if 'employees' or its membership change: dept.on_trait_change( c_handler, '[employees]' ) print "Changing list items" dept.employees[1] = donna # Calls B and C print "Replacing list" dept.employees = [donna] # Calls A and C