Informaticiens

Un problème informatique? Une question? Bref tout ce qui a un rapport avec l'informatique, les virus, les questions d'utilisation de logiciels...

Modérateurs : Naveed, GregLand

Répondre
Ryuuzaki
Messages : 124
Enregistré le : 04 juin 2007 20:03
Localisation : Laudun (30)

Informaticiens

Message par Ryuuzaki »

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 ^^

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()
#---------------------------------------------------------------------------
Image
Mick@el
Messages : 541
Enregistré le : 18 févr. 2006 21:45
Langage de programmation connu : Python, PHP, Javascript, C#, C++, C
Localisation : Nancy
Contact :

Message par Mick@el »

*mickael9 exerce la magie noire ....

Mmmmmh ...
Je vois ...

Un étudiant de 23 ans

Appellé François ...

BTS Info ...

Débutant en Python


C'est ça ? :P

Bon bref, http://www.developpez.net/forums/showth ... p?t=264558 ^^ (merci Google !)

(c'est quand même mieux avec un peu plus de précisions :P)

Je pense qu'il devrait essayer de recharger le fichier en utilisant simplement :

Code : Tout sélectionner

exec "from Donnes import *"
D'ailleurs il fait aussi :

Code : Tout sélectionner

import Donnes
Ca sert pas a grand chose de faire les deux ^^
Dans le deuxième cas, on peut utiliser reload(Donnes) à condition d'accéder aux données sous la forme "Donnes.Truc" a la place de "Truc"

Il serait d'ailleurs plus simple de faire une fonction "ChargerDonnes" :

Code : Tout sélectionner

def ChargerDonnes(self):
    exec "from Donnes import *"
    # On rempli ensuite l'interface graphique ...
En tout cas je ne pense pas que cette méthode d'accès aux données soit vraiment appropriée.
Modifié en dernier par Mick@el le 19 juin 2007 16:32, modifié 1 fois.
GregLand
Programmeur & Administrateur
Programmeur & Administrateur
Messages : 4431
Enregistré le : 10 oct. 2003 09:36
Langage de programmation connu : Utilisés régulièrement :
- Visual DialogScript
- WinDev
- AutoIt
- AutoHotkey
- Html, Js, Vbs, PHP

Utilisés très peu :
- C et C++
- VB et VB.Net (pour les DLL)
- Java (Pour Android)
- ASM (pour désassembler)
- Python (quand je m'ennuie)
- et quelques autres....
Localisation : Les Damps (27)
Contact :

Message par GregLand »

ça c'est du mickael9... J'adore ! Image
Config :
Image
Mick@el
Messages : 541
Enregistré le : 18 févr. 2006 21:45
Langage de programmation connu : Python, PHP, Javascript, C#, C++, C
Localisation : Nancy
Contact :

Message par Mick@el »

GregLand a écrit :ça c'est du mickael9... J'adore ! Image
^^
Tiens d'ailleurs Greg, tu pourrais pas changer mon pseudo en Mick@el ? :P
Ryuuzaki
Messages : 124
Enregistré le : 04 juin 2007 20:03
Localisation : Laudun (30)

Message par Ryuuzaki »

Re c'est toujours moi. Apres lui avoir dit ta réponse il m'a dit :
Le problème n'est pas de recharger les données, ça c'est fait...Il me faut un moyen de recharger la grille ou la frame...Car les données sont bien rechargées...En gros la grille est un dessin et il faudrait qu'elle se redessine.
Désolé de vous déranger^^
Image
GregLand
Programmeur & Administrateur
Programmeur & Administrateur
Messages : 4431
Enregistré le : 10 oct. 2003 09:36
Langage de programmation connu : Utilisés régulièrement :
- Visual DialogScript
- WinDev
- AutoIt
- AutoHotkey
- Html, Js, Vbs, PHP

Utilisés très peu :
- C et C++
- VB et VB.Net (pour les DLL)
- Java (Pour Android)
- ASM (pour désassembler)
- Python (quand je m'ennuie)
- et quelques autres....
Localisation : Les Damps (27)
Contact :

Message par GregLand »

Mick@el a écrit :Tiens d'ailleurs Greg, tu pourrais pas changer mon pseudo en Mick@el ? :P
C'est fait Mick@el.... :wink:
Config :
Image
Mick@el
Messages : 541
Enregistré le : 18 févr. 2006 21:45
Langage de programmation connu : Python, PHP, Javascript, C#, C++, C
Localisation : Nancy
Contact :

Message par Mick@el »

GregLand a écrit :
Mick@el a écrit :Tiens d'ailleurs Greg, tu pourrais pas changer mon pseudo en Mick@el ? :P
C'est fait Mick@el.... :wink:
Merci !
Ryuuzaki
Messages : 124
Enregistré le : 04 juin 2007 20:03
Localisation : Laudun (30)

Message par Ryuuzaki »

Ryuuzaki a écrit :Re c'est toujours moi. Apres lui avoir dit ta réponse il m'a dit :
Le problème n'est pas de recharger les données, ça c'est fait...Il me faut un moyen de recharger la grille ou la frame...Car les données sont bien rechargées...En gros la grille est un dessin et il faudrait qu'elle se redessine.
Désolé de vous déranger^^
pitit up ^^
Image
Mick@el
Messages : 541
Enregistré le : 18 févr. 2006 21:45
Langage de programmation connu : Python, PHP, Javascript, C#, C++, C
Localisation : Nancy
Contact :

Message par Mick@el »

On va dire qu'il faudrait faire une méthode ChargerDonnes dans la première classe (SimpleGrid)

Code : Tout sélectionner

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 
     self.ChargerDonnes()
  
  def ChargerDonnes():
     self.ClearGrid()
     #-------------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()
     # ...
Ensuite de la deuxième classe (TestFrame), utiliser self.grid.ChargerDonnes()

D'ailleurs Greg, tu peux aussi changer mon pseudo sur le site ? :P
J-Ben
Messages : 2160
Enregistré le : 20 déc. 2004 20:53
Langage de programmation connu : HTML CSS
Localisation : Drome (26)

Message par J-Ben »

Mick@el a écrit :D'ailleurs Greg, tu peux aussi changer mon pseudo sur le site ? :P
lol, maintenant que ca c'est fait, tu peux faire cà, mdr
Nostalgie : "Thiousi & J-ben : les modo de choc!" ^^

Groupe- ChaFeMaL : http://chafemal.freeheberg.com/
Boutique : http://chafemal.spreadshirt.net/

ChaFeMaL c'est moi ^^
Répondre