Informaticiens
Posté : 18 juin 2007 18:37
Salut all j'ai un ami qui a un problème pour son taf il doit dev un prog en WX python mais il bloque sur un petit truc.
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 ^^
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()
#---------------------------------------------------------------------------