Le principe est simple, il s'agit d'une grille qui va charger des données envoyées par un appareil...
Son problème se situe au niveau de la définition de la fonction Ouverture(self):
Il faut qu'il retrouve un moyen de rafraichir les données dee la grille lorsque l'on charge un fichier existant :p
Je vous poste le code ci-dessous, si l'un d'entre vous peut l'aider ^^
Code : Tout sélectionner
#!/usr/bin/python
#-*- coding: iso-8859-15 -*-
#Importation des differentes donnes contenues dans les modules ^^
import time
import Tkinter
import Donnees
import wx
from os import getcwd
#from USBconnect import*
import os
from os.path import *
from copieFichier import *
import wx.grid as gridlib
from Donnees import *
#IDdevice = ('FTCWA683',)
path = (getcwd() + "\\Donnees.py")#Definition d'un chemin pour fonctions (voir plus bas "Sauvegarer,SauvegarderSous")
testsauve = (getcwd()+"\\Sauvegardes")#Definition d'un chemin pour la creation du repertoire "Sauvegardes" (voir plus bas "VerCreateSauv")
class SimpleGrid(gridlib.Grid):#Classe de création de la grille(en fonction des variables contenues dans "Donnees.py"
def __init__(self, parent,log, style):
gridlib.Grid.__init__(self, parent,-1)
self.log=log
self.moveTo = None
self.SetGridLineColour("SKY BLUE")
self.CreateGrid(sonde, 9)#Creation de "sonde" lignes et de 9 colonnes
self.SetColSize(3,200)#Longueur specifique pour la colonne 3
self.SetColSize(8,200)#Longueur specifique pour la colonne 8
#self.startValue = grid.GetTable().GetValue(sonde, 9)#Releve les données de la grille à l'init
#-------------Varialbles de Données.py-------------
#Definition d'un 4eme attribut pour prendre en compte la couleur et empecher d'editer la colonne "Oui/Non" sans affecter les autres.
attr4 = gridlib.GridCellAttr()
#Boucle de remplissage des differentes colonnes
x=0
while(x<sonde):
attr3 = gridlib.GridCellAttr()#Creation d'un 3eme attribut pour definir les couleurs
self.SetRowAttr(x, attr3)#Remplissage par ligne
self.SetCellValue(x,5,str(verif[x]))
self.SetCellValue(x,6,str(F0[x]))
self.SetCellValue(x,4,str(IDsonde[x]+1))
self.SetCellValue(x,3,heure)
self.SetCellValue(x,7,str(e[x]))
if e[x] == 'Bon' :
attr3.SetTextColour("forest green")
else:
attr3.SetTextColour(wx.RED)
attr3.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD))
attr3.SetAlignment(wx.ALIGN_CENTER,wx.ALIGN_CENTER)
if e[x] == 'Bon' or 'Mauvais':
attr4.SetReadOnly(True)
x+=1
#Definition de l'attribut 1 (Lecture seulement ;) )
attr = gridlib.GridCellAttr()
attr.SetReadOnly(True)
attr.SetTextColour(wx.BLACK)
attr.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD))
attr.SetAlignment(wx.ALIGN_CENTER,wx.ALIGN_CENTER)
#Definition de l'attribut 2 (rien de particulier :) )
attr2=gridlib.GridCellAttr()
attr2.SetTextColour(wx.BLACK)
attr2.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD))
attr2.SetAlignment(wx.ALIGN_CENTER,wx.ALIGN_CENTER)
#Attributions caracteristiques pour les differentes colonnes
self.SetColAttr(0,attr2)
self.SetColAttr(1,attr2)
self.SetColAttr(2,attr2)
self.SetColAttr(3,attr)
self.SetColAttr(4, attr)
self.SetColAttr(5, attr)
self.SetColAttr(6, attr)
self.SetColAttr(7, attr4)
self.SetColAttr(8,attr2)
#On nomme les differents labels des colonnes du tableau
self.SetColLabelValue(0, "Autoclave N°")
self.SetColLabelValue(1, "Agent")
self.SetColLabelValue(2, "N° Cycle")
self.SetColLabelValue(3, "Heure de lecture")
self.SetColLabelValue(4, "ID Sonde")
self.SetColLabelValue(5, "Oui/Non")
self.SetColLabelValue(6, "F0")
self.SetColLabelValue(7, "Etat Pile")
self.SetColLabelValue(8, "Commentaires")
#Un peu de couleurs :p
self.SetLabelTextColour("violet")
self.SetDefaultCellBackgroundColour("GOLDENROD")
self.SetLabelBackgroundColour("turquoise")
#Ajustement de la position des labels
self.SetColLabelAlignment(wx.ALIGN_CENTER, wx.ALIGN_BOTTOM)
#Auto-copie colonnes 1,2,3
#definition de l'evenement
self.Bind(gridlib.EVT_GRID_CELL_CHANGE, self.OnChange)
def OnChange(self,evt):
while 1 :
a=self.GetCellValue(1,1)
if a !=None:
self.SetCellValue(1,0,str(a))
break
#---------------------------------------------------------------------------
#Constantes menu Fichier
ID_NOUVEAU = wx.NewId()
ID_OUVRIR = wx.NewId()
ID_SAUVER = wx.NewId()
ID_SAUVERSOUS = wx.NewId()
ID_QUITTER = wx.NewId()
o=wx.SYS_SCREEN_X #Variable qui renvoie la longueur de l'ecran
k=wx.SYS_SCREEN_Y #Variable qui renvoie la hauteur de l'ecran
class TestFrame(wx.Frame):#Frame Principale (fenetre)
def __init__(self,parent,log,style):
wx.Frame.__init__(self,parent, -1, "Tableau de données",size = (o,k),style=wx.DEFAULT_FRAME_STYLE)
#self.DetectUSB()
self.grid = SimpleGrid(self,parent,log)#Creation de la grille pour qu'elle soit sur la Frame
self.Avertissement()#Lance une message d'avertissement
self.Maximize()#Maximise la frame, "TestFrame", (pour avoir le prog grand ouvert a l'execution)
icone = wx.Icon("Sterlab.ico", wx.BITMAP_TYPE_ICO)#Definition de l'icone(chemin)
self.CreerMenu()#Crée le menu.
self.CreerBarreOutils()#Crée la toolbar.
self.SetIcon(icone)#Crée l'icone du programme (haut gauche)
self.CreerBarreEtat()#Crée la barre d'état (en bas)
self.Center()#Centre la frame
self.VerCreateSauv()#Fonction qui verifie l'existence du dossier "Sauvegardes" , si il n'existe pas : le crée.
def Avertissement(self): #Avertissement pour verif lecteur = branche
message = wx.MessageDialog(self, "Avant de demarrer veuillez vous assurrer d'avoir bien relie le lecteur du Steripen a votre ordinateur ! ",\
style=wx.ICON_INFORMATION|wx.CENTRE,pos=wx.DefaultPosition)
message.ShowModal()
"""#def DetectUSB(self):
#if d == IDdevice :
#message = wx.MessageDialog(self, "Recepteur Steripen bien connecte !",\
#style=wx.ICON_INFORMATION|wx.CENTRE,pos=wx.DefaultPosition)
#message.ShowModal()
#else :
#message = wx.MessageDialog(self, "Recepteur Steripen n'est pas connecte, veuillez le brancher a l'ordinateur !",\
#style=wx.ICON_INFORMATION|wx.CENTRE,pos=wx.DefaultPosition)
#message.ShowModal()"""
def VerCreateSauv(self):
if exists(testsauve):
pass
else :
os.mkdir(testsauve)#Crée le repertoire "Sauvegardes" s'il n'existe pas.
def CreerMenu(self):
#Definition de menu fichier
self.menufichier = wx.Menu()
self.menufichier.Append(ID_NOUVEAU,"&Nouveau","Nouveau projet")
self.menufichier.Append(ID_OUVRIR,"&Ouvrir","Ouvrir un fichier existant")
self.menufichier.Append(ID_SAUVER,"&Sauver","Enregistrer le fichier")
self.menufichier.Append(ID_SAUVERSOUS,"&Sauver sous","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_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 CreerBarreOutils(self):
#Creation de la barre d'outils
taille=(16,16)
self.toolbar = self.CreateToolBar(wx.TB_HORIZONTAL |wx.NO_BORDER | wx.TB_FLAT)
self.toolbar.AddSimpleTool(wx.ID_NEW,
wx.ArtProvider.GetBitmap(wx.ART_NEW, wx.ART_TOOLBAR, taille),"Nouveau")
self.toolbar.AddSeparator()
self.toolbar.AddSimpleTool(wx.ID_OPEN,
wx.ArtProvider.GetBitmap(wx.ART_FILE_OPEN, wx.ART_TOOLBAR, taille),"Ouvrir")
self.toolbar.AddSeparator()
self.toolbar.AddSimpleTool(wx.ID_SAVE,
wx.ArtProvider.GetBitmap(wx.ART_FILE_SAVE, wx.ART_TOOLBAR, taille),"Enregistrer Sous...")
self.toolbar.AddSeparator()
self.toolbar.AddSimpleTool(wx.ID_PRINT,
wx.ArtProvider.GetBitmap(wx.ART_PRINT, wx.ART_TOOLBAR, taille),"Imprimer")
self.toolbar.AddSeparator()
self.toolbar.Realize()
#Evenements liés à la barre d'outils
wx.EVT_TOOL(self,wx.ID_NEW,self.Nouveau)
wx.EVT_TOOL(self,wx.ID_OPEN,self.Ouverture)
wx.EVT_TOOL(self,wx.ID_SAVE,self.SauvegardeSous)
#wx.EVT_TOOL(self,wx.ID_PRINT,self.Imprimer)
#def Imprimer(self,event):
def Nouveau(self, event):
self.grid.ClearGrid()
def Ouverture(self, event):
dlg = wx.FileDialog(self,"Nom du fichier",testsauve,"","*.py;*.pyw",wx.OPEN)
retour = dlg.ShowModal()
if retour == wx.ID_OK :
chemin1 = dlg.GetPath()
self.grid.ClearGrid()
self.grid.CreateGrid(sonde,9)
"""x=0
y=0
while (x<sonde):
while(y<9):
val=self.grid.GetTable().GetValue(x,y)
self.grid.GetTable().SetValue(x,y,val)
y+=1
x+=1"""
def Sauvegarde(self,event):
pass
def SauvegardeSous(self,event):
dlg = wx.FileDialog(self,"Nom du fichier",getcwd()+"\\Sauvegardes","","*.py;*.pyw",wx.SAVE | wx.OVERWRITE_PROMPT)
retour = dlg.ShowModal()
if retour == wx.ID_OK :
chemin =dlg.GetPath()
#Recuperation des donnees editables
#---------Sauvegarde derniere colonne-----------
recup=open(str(path),'r')
sauv=open(str(chemin),'w')
lec=recup.read()
sauv.write(lec)
sauv.write('#----Commentaires-----------\ncom =[\"')
x=0
while(x<(sonde-1)):
a=self.grid.GetCellValue(x,8)
sauv.write(a+'\",')
x+=1
b=self.grid.GetCellValue(sonde-1,8)
sauv.write('\"'+b+'\"]\n')
#---------Sauvegarde 1ere colonne-------------------------------
sauv.write('#----Autoclave N°-----------\nautoclave =[\"')
x=0
while(x<(sonde-1)):
a=self.grid.GetCellValue(x,0)
sauv.write(a+'\",')
x+=1
b=self.grid.GetCellValue(sonde-1,0)
sauv.write('\"'+b+'\"]\n')
#---------Sauve 2eme colonne-------------------------------------------
sauv.write('#----Agent-----------\nagent =[\"')
x=0
while(x<(sonde-1)):
a=self.grid.GetCellValue(x,1)
sauv.write(a+'\",')
x+=1
b=self.grid.GetCellValue(sonde-1,1)
sauv.write('\"'+b+'\"]\n')
#---------Sauvegarde 3eme colonne-------------------------------
sauv.write('#----N°cycle-----------\nnum =[\"')
x=0
while(x<(sonde-1)):
a=self.grid.GetCellValue(x,2)
sauv.write(a+'\",')
x+=1
b=self.grid.GetCellValue(sonde-1,2)
sauv.write('\"'+b+'\"]\n')
recup.close
sauv.close
def Termine(self, event):#Fin de l'application, detruit la fenetre(TestFrame)
self.Destroy()
def Notify(self):#Chronometre (date et heure)
temps = time.localtime(time.time())
stemps = time.strftime("%d-%b-%Y %H:%M:%S",temps)
self.SetStatusText(stemps,1)
def CreerBarreEtat(self):#Creation de la barre d'etat du bas avec l'affichage de l'heure et date
self.CreateStatusBar(2)
self.SetStatusWidths([-1,150])
self.timer = wx.PyTimer(self.Notify)
self.timer.Start(10)
self.Notify()
#---------------------------------------------------------------------------
if __name__ == '__main__':
app = wx.PySimpleApp(True)
frame = TestFrame(None,-1,None)
app.SetTopWindow(frame.grid)
frame.Show(True)
app.MainLoop()
#---------------------------------------------------------------------------


