5 #---------------------------------------------------------------------- 
   7 class TestPanel(wx
.Panel
): 
   8     def __init__(self
, parent
, ID
, log
): 
   9         wx
.Panel
.__init
__(self
, parent
, ID
) 
  12         cal 
= wx
.calendar
.CalendarCtrl(self
, -1, wx
.DateTime_Now(), pos 
= (25,50), 
  13                              style 
= wx
.calendar
.CAL_SHOW_HOLIDAYS
 
  14                              | wx
.calendar
.CAL_SUNDAY_FIRST
 
  15                              | wx
.calendar
.CAL_SEQUENTIAL_MONTH_SELECTION
 
  18         self
.Bind(wx
.calendar
.EVT_CALENDAR
, self
.OnCalSelected
, id=cal
.GetId()) 
  20         b 
= wx
.Button(self
, -1, "Destroy the Calendar", pos 
= (250, 50)) 
  21         self
.Bind(wx
.EVT_BUTTON
, self
.OnButton
, id= b
.GetId()) 
  24         # Set up control to display a set of holidays: 
  25         self
.Bind(wx
.calendar
.EVT_CALENDAR_MONTH
, self
.OnChangeMonth
, cal
) 
  26         self
.holidays 
= [(1,1), (10,31), (12,25) ]    # (these don't move around) 
  29     def OnButton(self
, evt
): 
  30         if self
.cal 
is not None: 
  34     def OnCalSelected(self
, evt
): 
  35         self
.log
.write('OnCalSelected: %s\n' % evt
.GetDate()) 
  37     def OnChangeMonth(self
, evt
=None): 
  38         cur_month 
= self
.cal
.GetDate().GetMonth() + 1   # convert wxDateTime 0-11 => 1-12 
  40         for month
, day 
in self
.holidays
: 
  41             if month 
== cur_month
: 
  42                 self
.cal
.SetHoliday(day
) 
  44 #---------------------------------------------------------------------- 
  46 def runTest(frame
, nb
, log
): 
  47     win 
= TestPanel(nb
, -1, log
) 
  50 #---------------------------------------------------------------------- 
  57 Yet <i>another</i> calendar control.  This one is a wrapper around the C++ 
  58 version described in the docs.  This one will probably be a bit more efficient 
  59 than the one in wxPython.lib.calendar, but I like a few things about it better, 
  60 so I think both will stay in wxPython. 
  64 if __name__ 
== '__main__': 
  67     run
.main(['', os
.path
.basename(sys
.argv
[0])])