IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

wxPython Discussion :

TransferFromWindow Ou est mon dictionnaire?


Sujet :

wxPython

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 39
    Points : 24
    Points
    24
    Par défaut TransferFromWindow Ou est mon dictionnaire?
    Bonjour,

    Je "n'arrive pas a recuperer" les donnees de mon formulaire

    J'ai une sous classe wx.Frame avec un menu qui appelle
    une sous classe de wx.Dialog avec une sous classe de wx.Validator.

    Cette derniere recupere les donnes de wx.Dialog mais je ne suis pas capable
    de les recuprer pour les afficher ailleurs. Ca doit etre du python de base
    mais bon pas taper

    Voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    # -*- coding: latin-1 -*- 
     
    ### Mini projet wxpython
    ### juste un formulaire avec Nom/prenom
    ### dbname=ldbbase
    ## dbuser=user
    ## dbtable=repert avec id|nom|prenom
     
    import wx
    import psycopg2
     
    ##--Realisation de la connection a la 
    ##--base donne : dbbase
     
    ## try:
    ##     dbconn=psycopg2.connect("dbname='dbbase' user='user'   host='localhost'")
    ##     print "A priori la connection est un succs"
     
    ## except:
    ##     print "La connection a chou"
    ## ##--Cration d'un cursor
    ## cur=dbconn.cursor()
     
    ##--Creation du formulaire de saisi du nom|prenom    
    class SaisiPatient(wx.Dialog):
        def __init__(self,parent,data):
            wx.Dialog.__init__(self,parent,-1)
            data={"nom":"","prenom":""}
            ##--Creation des tiquettes
            about       = wx.StaticText(self, -1, "Saisi patient")
            nomlbl      = wx.StaticText(self, -1, "Nom")
            prenomlbl   = wx.StaticText(self,-1, "prenom")
            ##--Creation des controles
            nom         = wx.TextCtrl(self,-1,"",validator=ValSaisiPatient(data,"nom"))
            prenom      = wx.TextCtrl(self,-1,"",validator=ValSaisiPatient(data,"prenom"))
     
            ##--Creation des boutons Valider|Annuler
            validbtn=wx.Button(self,wx.ID_OK)
            annulbtn=wx.Button(self,wx.ID_CANCEL)
            validbtn.SetDefault()
            ###Creation du sizer
            mainsizer=wx.BoxSizer(wx.VERTICAL)
     
            ##--Creation d'un flexigrid 2 lignes 2 colonnes
            namesizer=wx.FlexGridSizer(2,2,5,5)
            namesizer.AddGrowableCol(1)
            namesizer.Add(nomlbl)
            namesizer.Add(nom,1,wx.EXPAND)
            namesizer.Add(prenomlbl)
            namesizer.Add(prenom,1,wx.EXPAND)    
     
     
            ##--Creation du sizer des boutons
            btnsizer=wx.StdDialogButtonSizer()
            btnsizer.AddButton(validbtn)
            btnsizer.AddButton(annulbtn)
            btnsizer.Realize()    
            ##--Peuplement du sizer vertical
            mainsizer.Add(about,0,wx.EXPAND)
            mainsizer.Add(namesizer,0,wx.EXPAND)
            mainsizer.Add(btnsizer,0,wx.EXPAND)
     
            self.SetSizer(mainsizer)
            mainsizer.Fit(self)
     
     
    ##--Definition des validateurs
    ##dans un premier temps pour uniquement recuperer les donnees
     
    class ValSaisiPatient(wx.PyValidator):
        def __init__(self,data,key):
            wx.PyValidator.__init__(self)
            self.data=data
            self.key=key
            print "les données du formulaire sont"
     
        def Clone(self):
            return ValSaisiPatient(self.data,self.key)
     
        def Validate(self,win):
            return True
     
        def TransferToWindow(self):
            return True
     
        def TransferFromWindow(self):
            txtctl=self.GetWindow()
            self.data[self.key]=txtctl.GetValue()
            print self.data
            return True
     
    ##--Cration de la fentre pincipale
    ##--avec menu: patient/nouveau
    class MainFrame(wx.Frame):
        def __init__(self,parent):
            wx.Frame.__init__(self,None,-1,"Repertoire")
     
            ##--Creation d'un panel pour contenir les menus
            self.panel=wx.Panel(self)
            ##--Creation de la barre de status
            statusbar=self.CreateStatusBar()
            ##--Creation de la barre de menu
            menubar=wx.MenuBar()
            ##--Creation du menu "patient"
            patient=wx.Menu()
            ##--Peuplement de la barre de menu
            menubar.Append(patient,"Patient")
            ##--Creation de l'item de menu "nouveau"
            nouveau=patient.Append(wx.NewId(),"Nouveau","Saisir un nouveau patient")
            #--Poursuite peuplement du menu:  Patient
            patient.AppendSeparator()
            quitte=patient.Append(wx.NewId(),"Quitter","Quitte l'application")
     
            ##--Mise en place de la barre de menu
            self.SetMenuBar(menubar)
     
    ##--A ce stade le programme la connection s'effectue
    ## il affiche la frame
            ##--Liaison des menus aux events
            self.Bind(wx.EVT_MENU, self.OnNouveauPatient,nouveau)
            self.Bind(wx.EVT_MENU, self.OnQuitte, quitte)
     
            ##--Creation  des rponse au choix de l'utilsateur
            ##--fait sur les menus
     
        def OnNouveauPatient(self,evt):
            print """Vous avez choisi d'enregistrer un nouveau patient\n
            j'affiche le formulaire de saisie"""
     
            dlg=SaisiPatient(self,data={"nom":"","prenom":""})
            dlg.ShowModal()
            dlg.Destroy()
     
            #wx.MessageBox("Vous voulez enregistrer %(nom)s %(prenom)s" % data)
            print ValSaisiPatient.data
     
        def OnQuitte(self,evt):
            self.Destroy()
     
    ##--Le main Loop
    if __name__=='__main__':
        app=wx.PySimpleApp()
        frame=MainFrame(None)
        frame.Show(True)	
        app.MainLoop()
    Je vois que mon dictionnaire que je cherche c'est self.data. Mais je n'arrive pas
    a l'utiliser.

    Merci

  2. #2
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    Bon bah j'ai trouvé tout seul. C'est assez gratifiant.

    Il fallait comprendre que la sous classe wx.PyValidator elle peut récuper les données du formulaire (= des textcontrol) dans la fonction TransferFomWindow
    que l'on peut dans cette meme fonction faire ce qu'on veut de ces données ca ca allait. Mais là où c'est sioux parce qu'il n'en est pas dit grand chose dans le wxpython en action c'est que il renvoit le resultat dans la classe qui l'a invoqué

    J'ai mis en rouge ma solution


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    # -*- coding: latin-1 -*- 
    
    ### Mini projet wxpython
    ### juste un formulaire avec Nom/prenom
    ### dbname=ldbbase
    ## dbuser=user
    ## dbtable=repert avec id|nom|prenom
    
    import wx
    import psycopg2
    
    ##--Realisation de la connection a la 
    ##--base donne : dbbase
    
    ## try:
    ##     dbconn=psycopg2.connect("dbname='dbbase' user='user'   host='localhost'")
    ##     print "A priori la connection est un succs"
    
    ## except:
    ##     print "La connection a chou"
    ## ##--Cration d'un cursor
    ## cur=dbconn.cursor()
    
    ##--Creation du formulaire de saisi du nom|prenom    
    class SaisiPatient(wx.Dialog):
        def __init__(self,parent,data):
            wx.Dialog.__init__(self,parent,-1)
             self.data=data
            ##--Creation des tiquettes
            about       = wx.StaticText(self, -1, "Saisi patient")
            nomlbl      = wx.StaticText(self, -1, "Nom")
            prenomlbl   = wx.StaticText(self,-1, "prenom")
            ##--Creation des controles
            nom         = wx.TextCtrl(self,-1,"",validator=ValSaisiPatient(self.data,"nom"))
            prenom      = wx.TextCtrl(self,-1,"",validator=ValSaisiPatient(self.data,"prenom"))
            
            ##--Creation des boutons Valider|Annuler
            validbtn=wx.Button(self,wx.ID_OK)
            annulbtn=wx.Button(self,wx.ID_CANCEL)
            validbtn.SetDefault()
            ###Creation du sizer
            mainsizer=wx.BoxSizer(wx.VERTICAL)
            
            ##--Creation d'un flexigrid 2 lignes 2 colonnes
            namesizer=wx.FlexGridSizer(2,2,5,5)
            namesizer.AddGrowableCol(1)
            namesizer.Add(nomlbl)
            namesizer.Add(nom,1,wx.EXPAND)
            namesizer.Add(prenomlbl)
            namesizer.Add(prenom,1,wx.EXPAND)    
            
            
            ##--Creation du sizer des boutons
            btnsizer=wx.StdDialogButtonSizer()
            btnsizer.AddButton(validbtn)
            btnsizer.AddButton(annulbtn)
            btnsizer.Realize()    
            ##--Peuplement du sizer vertical
            mainsizer.Add(about,0,wx.EXPAND)
            mainsizer.Add(namesizer,0,wx.EXPAND)
            mainsizer.Add(btnsizer,0,wx.EXPAND)
            
            self.SetSizer(mainsizer)
            mainsizer.Fit(self)
    
     
    ##--Definition des validateurs
    ##dans un premier temps pour uniquement recuperer les donnees
    
    class ValSaisiPatient(wx.PyValidator):
        def __init__(self,data,key):
            wx.PyValidator.__init__(self)
            self.data=data
            self.key=key
            print "les donnees du formulaire sont"
        
        def Clone(self):
            return ValSaisiPatient(self.data,self.key)
        
        def Validate(self,win):
            return True
    
        def TransferToWindow(self):
            return True
            
        def TransferFromWindow(self):
            txtctl=self.GetWindow()
            self.data[self.key]=txtctl.GetValue()
            print self.data
            return True
            
    ##--Cration de la fentre pincipale
    ##--avec menu: patient/nouveau
    class MainFrame(wx.Frame):
        def __init__(self,parent):
            wx.Frame.__init__(self,None,-1,"Repertoire")
            
            ##--Creation d'un panel pour contenir les menus
            self.panel=wx.Panel(self)
            ##--Creation de la barre de status
            statusbar=self.CreateStatusBar()
            ##--Creation de la barre de menu
            menubar=wx.MenuBar()
            ##--Creation du menu "patient"
            patient=wx.Menu()
            ##--Peuplement de la barre de menu
            menubar.Append(patient,"Patient")
            ##--Creation de l'item de menu "nouveau"
            nouveau=patient.Append(wx.NewId(),"Nouveau","Saisir un nouveau patient")
            #--Poursuite peuplement du menu:  Patient
            patient.AppendSeparator()
            quitte=patient.Append(wx.NewId(),"Quitter","Quitte l'application")
            
            ##--Mise en place de la barre de menu
            self.SetMenuBar(menubar)
    
    ##--A ce stade le programme la connection s'effectue
    ## il affiche la frame
            ##--Liaison des menus aux events
            self.Bind(wx.EVT_MENU, self.OnNouveauPatient,nouveau)
            self.Bind(wx.EVT_MENU, self.OnQuitte, quitte)
            
            ##--Creation  des reponse au choix de l'utilsateur
            ##--fait sur les menus
            
        def OnNouveauPatient(self,evt):
            print """Vous avez choisi d'enregistrer un nouveau patient\n
            j'affiche le formulaire de saisie"""
        
            dlg=SaisiPatient(self,data={"nom":"","prenom":""})
            dlg.ShowModal()
            dlg.Destroy()
                
            #wx.MessageBox("Vous voulez enregistrer %(nom)s %(prenom)s" % dlg.data)
            
            
        def OnQuitte(self,evt):
            self.Destroy()
    
    ##--Le main Loop
    if __name__=='__main__':
        app=wx.PySimpleApp()
        data={'nom':'','prenom':''}
    
        frame=MainFrame(None)
        frame.Show(True)	
        app.MainLoop()
    Cooolllll

    Allez tchao je continue ma route elle va etre longue.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Serveur] [phpinfo] Quel est mon serveur ??
    Par Silvia12 dans le forum Apache
    Réponses: 4
    Dernier message: 13/04/2006, 10h39
  2. Où est mon erreur ?
    Par Fusio dans le forum Langage
    Réponses: 5
    Dernier message: 07/04/2006, 17h29
  3. Sur quel partition est mon fichier?
    Par nicolaskarp dans le forum Administration système
    Réponses: 8
    Dernier message: 15/12/2005, 17h40
  4. où est mon sous-formulaire ?
    Par yves_fuji dans le forum IHM
    Réponses: 2
    Dernier message: 08/09/2004, 08h34
  5. Problème d'exportation jar : où est mon répertoire bin ?
    Par fredcontin dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 25/05/2004, 16h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo