1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
| # -*- coding: UTF-8 -*-
# Le coding doit être la 1ère ou 2eme ligne !! (voir http://www.python.org/dev/peps/pep-0263/)
#-------------------------------------------------------------------------------
# Name: Calendar_Panel
# Purpose: Test de wx.lib.calendar depuis wxPython
# montre les weekends et le jours fériés en différentes couleurs
# Author:
#
# Created: 13/08/2013
# Copyright:
# Licence: GPL
#-------------------------------------------------------------------------------
from __future__ import unicode_literals
import wx
import wx.lib.calendar
class Calendar_Panel(wx.Panel):
""" crée un panel avec un calendar"""
def __init__(self, parent, id):
global text_date
# create a panel
self.panel1=wx.Panel.__init__(self, parent, id)
# cree un label sur le panel
self.label1 = wx.StaticText(self, id, "", wx.Point(25, 220))
# cree le calendar
self.cal = wx.lib.calendar.Calendar(self, id, pos=(25, 35), size=(200, 180))
# va chercher l'anée et le mois courant
start_month = self.cal.GetMonth()
start_year = self.cal.GetYear()
# set des couleurs
self.SetBackgroundColour("#DEB887")
self.cal.SetWeekColor('#FFFFFF', '#0000FF')
self.cal.SetColor(wx.lib.calendar.COLOR_WEEKEND_FONT, '#FF0000')
self.cal.SetColor(wx.lib.calendar.COLOR_WEEKEND_BACKGROUND, '#D3D3D3')
self.cal.ShowWeekEnd()
# couleur des fériés
# ici les dates des fériés
# ce sont UNIQUEMENT les jours fériés FIXES
# {mois:[liste des jours]}
holidays = {
1: [1],
2: [],
3: [],
4: [],
5: [1],
6: [],
7: [21],
8: [15],
9: [],
10: [],
11: [1, 11],
12: [25, 31]
}
self.set_days = holidays[start_month]
self.cal.AddSelect(self.set_days, '#FF0000', '#FFFF00')
self.cal.Refresh()
# click de la souris sur un jour
self.Bind(wx.lib.calendar.EVT_CALENDAR, self.OnCalSelected)
# cree le selecteur d'année
self.texty = wx.TextCtrl(self, -1, str(start_year), pos=(25, 10), size=(50, -1))
h = self.texty.GetSize().height
self.spiny = wx.SpinButton(self, -1, pos=(70, 10), size=(h*2, h))
self.spiny.SetRange(2010, 2050) # laps de temps
self.spiny.SetValue(start_year)
self.Bind(wx.EVT_SPIN, self.OnSpiny, self.spiny)
# cree le selecteur de mois
self.textm = wx.TextCtrl(self, -1, str(start_month), pos=(140, 10), size=(50, -1))
h = self.textm.GetSize().height
self.spinm = wx.SpinButton(self, -1, pos=(185, 10), size=(h*2, h))
self.spinm.SetRange(1, 12)
self.spinm.SetValue(start_month)
self.Bind(wx.EVT_SPIN, self.OnSpinm, self.spinm)
def OnCalSelected(self, evt):
text = "Date sélectionnée = %02d/%02d/%d" % (evt.day, evt.month, evt.year)
laDate= "%02d/%02d/%d" % (evt.day, evt.month, evt.year) #uniquement la date
self.label1.SetLabel(text)
p=Perso(laDate) # --- Utilisation d'une autre classe ----
print p.text_date+" vue dans la classe Calendar_Panel"
def OnSpiny(self, event):
year = event.GetPosition()
self.texty.SetValue(str(year))
self.cal.SetYear(year)
self.ResetDisplay()
def OnSpinm(self, event):
month = event.GetPosition()
self.textm.SetValue(str(month))
self.cal.SetMonth(month)
self.ResetDisplay()
def ResetDisplay(self):
# reset de la couleur des fériés (quand on change de mois ou d'année)
self.cal.AddSelect(self.set_days, 'black', 'white')
# va chercher le numero du mois
month = self.cal.GetMonth()
set_days = holidays[month]
# set de la nouvelle couleur de fériés
self.cal.AddSelect(set_days, 'red', 'white')
self.cal.Refresh()
# garde la nouvelle liste en memoire
self.set_days = set_days
class Perso:
def __init__(self,laDate):
self.text_date=laDate
print self.text_date+" vue dans la classe Perso"
if __name__ == "__main__":
app = wx.App()
# cree une frame, sans parent, -1 pour default ID
frame = wx.Frame(None, -1, "Simple calendrier", size = (260, 280))
# instanciation de classe
Calendar_Panel(frame, -1)
frame.Show(1)
app.MainLoop() |
Partager