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 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244
| # -*- coding: cp1252 -*-
import wx #importe le module graphique wx
#import wx.aui
import time #importe module de temps
import Tkinter #importe la bibliotheque Tkinter.
import sys #importes fonctions systeme
import pickle #importe module d'encodage propre a python
import os #importe fonctions de l'OS
from os import getcwd #importe la fonction qui recupere le chemin du repertoire courrant.
import wx.grid as gridlib #Importe le module de la grille sous le nom "gridlib".
import wx.lib.printout as printout #importe module d'impression.
from os.path import * #importe les objets de la classe path.
import gadfly #Module BDD Locale
#--Declaration-des-Variables--------------
ComboDir=(getcwd()+"\\Params\\ComboListe.ini")#Chemin des ComboBox
HeureOrdi = time.localtime(time.time()) #Fonction pour recupérer l'heure et la date courrante.
HeureAffiche = time.strftime("%d-%b-%Y",HeureOrdi) #Affiche la date au format voulu.
LongScr=wx.SYS_SCREEN_X #Variable qui renvoie la longueur de l'ecran
LargScr=wx.SYS_SCREEN_Y #Variable qui renvoie la hauteur de l'ecran
SaveDir = (getcwd()+"\\Save") #Definition d'un chemin pour la creation du repertoire "Sauvegardes" (voir plus bas "VerCreateSauv")
SaveData = (SaveDir + "\\Data.sav") #Chemin du fichier Donnees.sav pour 1er remplissage dela grille.
RepBDD = (getcwd()+"\\BDD")
#-------BDD-----------------------
baseDonn = gadfly.gadfly()
baseDonn.startup("maBDD",RepBDD)
cur = baseDonn.cursor()
cur.execute("create table FichePays (nom varchar)")
#cur.execute("insert into membres(age, nom, taille) values (21,'Dupont',1.83)")
baseDonn.commit()
#---Identifiants-du-Menu-------------
ID_NOUVEAU = wx.NewId()
ID_OUVRIR = wx.NewId()
ID_SAUVER = wx.NewId()
ID_SAUVERSOUS = wx.NewId()
ID_QUITTER = wx.NewId()
ID_STANDARD = wx.NewId()
ID_PERSO = wx.NewId()
ID_FULLSCREEN = wx.NewId()
#---------Permet de créer le dossier sauvegarde au lancement du programme---------
if exists(SaveData): #Verifie que le fichier "Data.sav" existe.
pass #Si oui il ne fait rien et continue
else : #Sinon
if exists(SaveDir): #Verifie si le dossier "Save" a déjà été crée.
pass
else:
os.mkdir(SaveDir) #Crée le repertoire "Sauvegardes" s'il n'existe pas.
class PageUn(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
ComboOuv=open(ComboDir,'r')
exec(ComboOuv)
ComboOuv.close()
BoxPays = wx.ComboBox(self,100,"Choix du pays",(100, 50),
(200, -1),ListePays,wx.CB_DROPDOWN|wx.CB_READONLY|wx.CB_SORT)
box = wx.StaticBox(self, -1, "Selectionnez un pays :")
sizer1 = wx.StaticBoxSizer(box, wx.HORIZONTAL)
sizer1.Add(BoxPays, 1, wx.CENTRE|wx.ALL, 10)
mainSizer = wx.BoxSizer(wx.HORIZONTAL)
mainSizer.Add(sizer1, 0,wx.ALL, 10)
self.SetSizer(mainSizer)
self.Bind(wx.EVT_COMBOBOX, self.EvtComboBox, BoxPays)
def EvtComboBox(self,event):
ComboOuv=open(ComboDir,'r')
exec(ComboOuv)
ComboOuv.close()
BoxRegion = wx.ComboBox(self,100,"Choix Region",(100, 100),
(200, -1),ListePays,wx.CB_DROPDOWN|wx.CB_READONLY|wx.CB_SORT)
box2 = wx.StaticBox(self, -1, "Selectionnez une région :")
sizer2 = wx.StaticBoxSizer(box2, wx.HORIZONTAL)
sizer2.Add(BoxRegion, 1, wx.CENTRE|wx.ALL, 10)
class PageDeux(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
t = wx.StaticText(self, -1, "Ceci est l'objet Page 2", (40,40))
class PageTrois(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
grid1 = Grille1(self,parent,size=(200,250))
grid2 = Grille2(self,parent,size=(235,150))
#--------Sizer Grid 1--------------
box = wx.StaticBox(self, -1, "Titre Grid 1:")
sizer1 = wx.StaticBoxSizer(box, wx.HORIZONTAL)
sizer1.Add(grid1, 1, wx.CENTRE|wx.ALL, 10)
#------------Sizer grid 2---------
box2 = wx.StaticBox(self, -1, "Titre Grid 2:")
sizer2 = wx.StaticBoxSizer(box2, wx.HORIZONTAL)
sizer2.Add(grid2, 1, wx.CENTRE|wx.ALL, 10)
mainSizer = wx.BoxSizer(wx.HORIZONTAL)
mainSizer.Add(sizer1, 0,wx.ALL, 10)
mainSizer.Add(sizer2,0,wx.ALL,10)
self.SetSizer(mainSizer)
#class SelectionPays(wx.Panel):
#def __init__(self,parent):
#wx.Panel.__init__(self,parent)
class MainFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title="Projet Standard V0.0",size=(800,600))
global nb,BoxPays
self.Maximize()
self.Menu()#Crée le menu.
self.Center()#Centre la frame
self.CreerBarreEtat() #Crée la barre d'état (en bas).
# On crée un panel avec un Notebook dessus
p = wx.Panel(self)
nb = wx.Notebook(p)
# On met le tout dans un sizer
sizer = wx.BoxSizer()
sizer.Add(nb, 1, wx.EXPAND)
p.SetSizer(sizer)
#selpays = SelectionPays(self)
def Menu(self):
#-----------------Definition de menu fichier
self.menufichier = wx.Menu()
self.sousmenu = wx.Menu()
self.sousmenu.Append(ID_STANDARD,"&Projet Standard\tCTRL+N","Nouveau projet standard")
self.sousmenu.Append(ID_PERSO,"&Projet Perso\tCTRL+P","Nouveau projet personnalisé")
self.menufichier.AppendMenu(ID_NOUVEAU,"&Nouveau",self.sousmenu)
self.menufichier.Append(ID_OUVRIR,"&Ouvrir\tCTRL+O","Ouvrir un fichier existant")
self.menufichier.Append(ID_SAUVER,"&Sauver\tCTRL+S","Enregistrer le fichier")
self.menufichier.Append(ID_SAUVERSOUS,"&Sauver sous\tCTRL+E","Enregistrer sous un autre nom")
self.menufichier.Append(ID_QUITTER,"&Quitter\tCTRL+Q","Quitter l'application")
#----------Definition des gestionnaires d'evenements lies au menu
#wx.EVT_MENU(self,ID_NOUVEAU,self.Nouveau)
#wx.EVT_MENU(self,ID_OUVRIR,self.Ouverture)
#wx.EVT_MENU(self,ID_SAUVER,self.Sauvegarde)
#wx.EVT_MENU(self,ID_SAUVERSOUS,self.SauvegardeSous)
wx.EVT_MENU(self,ID_STANDARD,self.ProjetStandard)
wx.EVT_MENU(self,ID_QUITTER,self.Termine)
#-----------------Definition de la barre de menu et insertion des menus
self.menubar = wx.MenuBar()
self.menubar.Show(True)
self.menubar.Append(self.menufichier,"&Fichier")
self.SetMenuBar(self.menubar)
def ProjetStandard(self,event):
# On crée les pages dérivées du Notebook
page1 = PageUn(nb)
#page2 = PageDeux(nb)
#page3 = PageTrois(nb)
# On ajoute les onglets et leurs titres
nb.AddPage(page1, "Definition zone Geo")
#nb.AddPage(page2, "Onglet 2")
#nb.AddPage(page3, "Page 3")
def Chrono(self):#Chronometre (date et heure)
temps = time.localtime(time.time()) #Recupere la date et l'heure.
stemps = time.strftime("%d-%b-%Y %H:%M:%S",temps) #Definit le format voulu.
self.SetStatusText(stemps,1) #Affiche a chaque seconde.
def CreerBarreEtat(self):#Creation de la barre d'etat du bas avec l'affichage de l'heure et date
self.CreateStatusBar(2) #Cree une barre de statut (en bas) de deux parties.
self.SetStatusWidths([-1,150]) #Definit la taille.
self.timer = wx.PyTimer(self.Chrono) #Cree le timer.
self.timer.Start(10) #Lance le timer.
self.Chrono()#Affiche.
def Termine(self,event):
self.Destroy() #Detruit l'objet wx.Frame (detruit la frame).
class Grille1(gridlib.Grid):#Classe de création de la grille
def __init__(self,parent,pos,size):
gridlib.Grid.__init__(self,parent,pos=(50,50),size=(200,250))
self.CreateGrid(5,2)#Creation de la grille
#self.SetLabelTextColour("violet") #Couleur du texte .
#self.SetColLabelAlignment(wx.ALIGN_CENTER, wx.ALIGN_BOTTOM) #Aligne les labels au centre en bas de la cellule.
self.DisableDragGridSize()#Empeche de redimensionner les cases avec la souris
#self.EnableEditing(True)#Si FALSE Met TOUTE la grid en READ ONLY !
self.SetReadOnly(4,1,True) #Mets la case spécifiée en read only
self.SetCellValue(4,1,"Read Only")
self.SetRowLabelSize(0)#Enleve label des lignes
self.SetColLabelSize(0)#Enleve Label des Col
self.SetScrollLineY(1)#Enleve scroll vertical
self.SetScrollLineX(1)#Enleve scroll horiz
self.SetGridLineColour(wx.BLACK)
#---Fait une case d'une ligne et 2 colonnes....
self.SetCellSize(0, 0, 1, 2);
self.SetCellEditor(0, 0, wx.grid.GridCellAutoWrapStringEditor())#Multiligne
#-----------Aller prendre couleurs dans wx colourdatabase--------
self.SetDefaultCellBackgroundColour("WHITE")#Couleur du fond des cases
self.SetDefaultCellTextColour(wx.BLACK)
#-----------------ComboBox-------------------------------------
ComboOuv=open(ComboDir,'r') #Ouvre ComboListe1.ini en "read"
exec(ComboOuv) #Execute ComboListe.ini
ComboOuv.close() #Ferme ComboListe.ini
Choixbox = wx.grid.GridCellChoiceEditor(combo1, False)
self.SetCellEditor(1, 1, Choixbox)
self.SetCellValue(1,1,"OUI")#Triche pour 1ere valeur...Inutile (?)
#-------------------Ajuste la taille des cases du Grid
NumCols = self.GetNumberCols()#Compte le nombre de colonnes du Grid
NumLignes = self.GetNumberRows()#Compte le nombre de lignes du Grid
x=0
y=0
while (x<NumLignes) :
self.SetCellAlignment(x, 0, wx.ALIGN_CENTRE, wx.ALIGN_CENTRE)
self.SetCellAlignment(x, 1, wx.ALIGN_CENTRE, wx.ALIGN_CENTRE)
self.SetCellFont(x,0,wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD))#Police col 1
self.SetCellFont(x,1,wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD))#Police col 2
self.SetRowSize(x,50)
x+=1
while(y<NumCols):
self.SetColSize(y,100)
y+=1
#--------Empeche l'overflow-----------------
attr=gridlib.GridCellAttr()
attr.SetOverflow(False)
x=0
while(x<NumCols):
self.SetColAttr(x,attr)
x+=1
class Grille2(gridlib.Grid):#Classe de création de la grille
def __init__(self,parent,pos,size):
gridlib.Grid.__init__(self,parent,pos=(400,50),size=(235,150))
self.CreateGrid(5,2)#Creation de la grille
self.SetColLabelAlignment(wx.ALIGN_CENTER, wx.ALIGN_BOTTOM) #Aligne les labels au centre en bas de la cellule.
self.DisableDragGridSize()
if __name__ == "__main__":
app = wx.App()
MainFrame().Show()
app.MainLoop() |
Partager