PyValidator: Comment récupérer la donnée entrée pour sauvegarder dans un fichier

zannguyen Messages postés 6 Date d'inscription jeudi 3 septembre 2009 Statut Membre Dernière intervention 24 novembre 2009 - 9 sept. 2009 à 09:37
zannguyen Messages postés 6 Date d'inscription jeudi 3 septembre 2009 Statut Membre Dernière intervention 24 novembre 2009 - 11 sept. 2009 à 12:00
Bonjour à tous,
Je commence avec Python, c'est peut être une question toute bête mais je ne sais pas comment faire.

Je crée un dialog box pour entrer des données avec PyValidator (C'est l'exemple 9.13 dans "wxPython in Action").

Ma question est: Comment on récupère ces données entrées par l'utilisateur pour ensuite enregistrer dans un fichier externe sous forme "data_entree.txt".

Sachant que dans la classe PyValidator, il y des méthodes "TransferToWindow" et "TransferFromWindow" mais je ne sais pas comment m'en servir.

Peut-être on a pas une réponse exacte mais si vous avez une idée sur le principe, je suis preneur.

Merci par avance.

3 réponses

lespinx Messages postés 106 Date d'inscription lundi 9 octobre 2006 Statut Membre Dernière intervention 23 novembre 2022 77
9 sept. 2009 à 21:28
Bonsoir,
Peut-etre une réponse sur ce lien
Bonne chance
0
zannguyen Messages postés 6 Date d'inscription jeudi 3 septembre 2009 Statut Membre Dernière intervention 24 novembre 2009
10 sept. 2009 à 14:44
Bonjour,
J'ai suivi votre lien mais je n'ai toujours pas résolu mon problème.

Je joins ici le fichier (c'est un exemple en effet avec quelque modification).

J'ai essayer d'imprimer les données quand on clique sur "Valider", mais il n'apparaît rien sur l'écran.

Quelqu'un peut m'aider. Merci.

# -*- coding: utf-8 -*-

import wx

import string



about_txt = """\

Toto
"""




class CharValidator(wx.PyValidator):

    def __init__(self, flag):

         wx.PyValidator.__init__(self)

         self.flag = flag

         self.Bind(wx.EVT_CHAR, self.OnChar)



    def Clone(self):

         """

         Note that every validator must implement the Clone() method.

         """

         return CharValidator(self.flag)



    def Validate(self, win):

         return True



    def TransferToWindow(self):

         return True 



    def TransferFromWindow(self):

         return True



    def OnChar(self, evt):

         key = chr(evt.GetKeyCode())

         if self.flag == "no-alpha" and key in string.letters:

              return

         if self.flag == "no-digit" and key in string.digits:

              return

         evt.Skip()




class MyDialog(wx.Dialog):

    def __init__(self):

        wx.Dialog.__init__(self, None, -1, "Validators: behavior modification")



        # Create the text controls

        about   = wx.StaticText(self, -1, about_txt)

        name_l  = wx.StaticText(self, -1, "Name:")

        email_l = wx.StaticText(self, -1, "Email:")

        phone_l = wx.StaticText(self, -1, "Phone:")

        

        name_t  = wx.TextCtrl(self, validator=CharValidator("no-digit"))

        email_t = wx.TextCtrl(self, validator=CharValidator("any"))

        phone_t = wx.TextCtrl(self, validator=CharValidator("no-alpha"))


      

        # Use standard button IDs

        okay   = wx.Button(self, wx.ID_OK)
        self.Bind(wx.EVT_BUTTON, self.cliquerOK, okay)
        



#        okay.SetDefault()

        cancel = wx.Button(self, wx.ID_CANCEL)

        self.Bind(wx.EVT_BUTTON, self.cliquerExit, cancel)

        # Layout with sizers

        sizer = wx.BoxSizer(wx.VERTICAL)

        sizer.Add(about, 0, wx.ALL, 5)

        sizer.Add(wx.StaticLine(self), 0, wx.EXPAND|wx.ALL, 5)

        

        fgs = wx.FlexGridSizer(3, 2, 5, 5)

        fgs.Add(name_l, 0, wx.ALIGN_RIGHT)

        fgs.Add(name_t, 0, wx.EXPAND)

        fgs.Add(email_l, 0, wx.ALIGN_RIGHT)

        fgs.Add(email_t, 0, wx.EXPAND)

        fgs.Add(phone_l, 0, wx.ALIGN_RIGHT)

        fgs.Add(phone_t, 0, wx.EXPAND)

        fgs.AddGrowableCol(1)

        sizer.Add(fgs, 0, wx.EXPAND|wx.ALL, 5)



        btns = wx.StdDialogButtonSizer()

        btns.AddButton(okay)

        btns.AddButton(cancel)

        btns.Realize()

        sizer.Add(btns, 0, wx.EXPAND|wx.ALL, 5)



        self.SetSizer(sizer)

        sizer.Fit(self)
        self.aaaa = str(name_t.GetValue())
        self.bbbb = str(email_t.GetValue())
               
    def cliquerOK(self,event):
    aa = self.aaaa
            bb = self.bbbb
# Je veux imprimer ici la valeur entrée mais il n'y a rien sur l'écran
    print aa 
            print bb
#	    self.Close()
   
    def cliquerExit(self, event):
     	self.Destroy()
    	
# Programme principal

app = wx.PySimpleApp()

#

dlg = MyDialog()

dlg.ShowModal()
dlg.Destroy()



app.MainLoop()
0
zannguyen Messages postés 6 Date d'inscription jeudi 3 septembre 2009 Statut Membre Dernière intervention 24 novembre 2009
11 sept. 2009 à 12:00
En effet j'ai mal fait:
self.aaaa = str(name_t.GetValue())
au lieu de faire
self.aaaa = name_t puis dans le CliquerOK il faut
print (self.aaaa.GetValue())

Merci en tous cas
0
Rejoignez-nous