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 :

affichage d'un montant decimal dans un NumCtrl [Python 3.X]


Sujet :

wxPython

  1. #1
    Membre du Club
    Profil pro
    chef de projet
    Inscrit en
    Septembre 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : chef de projet

    Informations forums :
    Inscription : Septembre 2008
    Messages : 43
    Points : 50
    Points
    50
    Par défaut affichage d'un montant decimal dans un NumCtrl
    Bonjour,

    Je rencontre un problème ennuyeux dans l'affichage d'un montant avec décimales dans un champs NumCtrl de WxPython.
    Voici la définition du champs :

    class FormPersonne ( wx.Frame ):

    def __init__( self, parent ):
    wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 843,512 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )
    self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
    bSizer1 = wx.BoxSizer( wx.VERTICAL )

    self.m_staticText1 = wx.StaticText( self, wx.ID_ANY, u"NOM", wx.DefaultPosition, wx.DefaultSize, 0 )
    self.m_staticText1.Wrap( -1 )
    bSizer1.Add( self.m_staticText1, 0, wx.ALL, 5 )

    self.m_textNom = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size( 250,-1 ), 0 )
    bSizer1.Add( self.m_textNom, 0, wx.ALL, 5 )

    self.m_staticText2 = wx.StaticText( self, wx.ID_ANY, u"AGE", wx.DefaultPosition, wx.DefaultSize, 0 )
    self.m_staticText2.Wrap( -1 )
    bSizer1.Add( self.m_staticText2, 0, wx.ALL, 5 )

    self.m_intAge = IntCtrl( self, wx.ID_ANY, 0, wx.DefaultPosition, wx.DefaultSize, 0 )
    bSizer1.Add( self.m_intAge, 0, wx.ALL, 5 )

    self.m_staticText3 = wx.StaticText( self, wx.ID_ANY, u"MONTANT", wx.DefaultPosition, wx.DefaultSize, 0 )
    self.m_staticText3.Wrap( -1 )
    bSizer1.Add( self.m_staticText3, 0, wx.ALL, 5 )

    self.m_montant = NumCtrl( self, wx.ID_ANY, value=0, pos=wx.DefaultPosition, size=wx.DefaultSize,style= 0,integerWidth = 15, fractionWidth = 2,autoSize=True )
    bSizer1.Add( self.m_montant, 0, wx.ALL, 5 )


    self.SetSizer( bSizer1 )
    self.Layout()

    self.Centre( wx.BOTH )


    En particulier la zone de saisie est :

    self.m_montant = NumCtrl( self, wx.ID_ANY, value=0, pos=wx.DefaultPosition, size=wx.DefaultSize,style= 0,integerWidth = 15, fractionWidth = 2,autoSize=True )

    Ma variable montant contient un nombre et

    Print(montant) affiche 1234,56

    Par contre mon instruction :

    frame.m_montant.SetValue(montant)

    affiche 123456,00

    Je suis persuadé que ma définition de mon champs de type NumCtrl est incorrecte mais je n'arrive pas à en trouver la raison.

    D'avance merci et surtout meilleurs développements.

  2. #2
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    Salut,

    Il aurait fallu tout de même plus d'informations sur d'où sort ce NumCtrl, et surtout d'utiliser les balises codes du forum lorsque tu insères du code dans ton message.

    Cela doit-être masked.NumCtrl je suppose, et si on regarde l'api de cette classe :

    NumCtrl(
    parent, id = -1,
    value = 0,
    pos = wx.DefaultPosition,
    size = wx.DefaultSize,
    style = 0,
    validator = wx.DefaultValidator,
    name = "masked.number",
    integerWidth = 10,
    fractionWidth = 0,
    allowNone = False,
    allowNegative = True,
    useParensForNegatives = False,
    groupDigits = False,
    groupChar = ',',
    decimalChar = '.',
    min = None,
    max = None,
    limited = False,
    limitOnFieldChange = False,
    selectOnEntry = True,
    foregroundColour = "Black",
    signedForegroundColour = "Red",
    emptyBackgroundColour = "White",
    validBackgroundColour = "White",
    invalidBackgroundColour = "Yellow",
    autoSize = True
    )
    On peut constater qu'il y a un paramètre decimalChar et qui est par défaut le '.', et surtout indiquer également le groupChar si tu spécifies la virgule comme séparateur décimal.
    Ce n'est qu'une piste, je ne connais pas du tout cette bibliothèque.
    Je te conseille tout de même d'exécuter le demo.py de wxPython, voir le github si tu ne l'as pas dans ton module, il y a un tas d'exemples, notamment celui qui t'intéresse =)

    Si tu as toujours ce problème, sans doute devrais-tu fournir un code reproductible (testable facilement) afin que quelqu'un puisse t'aider à le résoudre.

    Bon courage.

  3. #3
    Membre du Club
    Profil pro
    chef de projet
    Inscrit en
    Septembre 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : chef de projet

    Informations forums :
    Inscription : Septembre 2008
    Messages : 43
    Points : 50
    Points
    50
    Par défaut Merci Bistouille
    Tes précieux conseils m'ont permis de trouver le problème !
    En fait le problème ne venait pas du contrôle NumCtrl comme je l'ai cru dans un premier temps.
    Pour faire court j'ai employé la bibliothèque SqlAchemy qui m'a retourné une colonne d'une table SqLite définie en tant que REAL sous la forme d'une chaîne de caractères Python (ce que je n'ai pas vu immédiatement difficile de faire la différence visuellment entre un ',' et un '.'!).
    Voici un exemple de code qui fonctionne :
    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
     
    import wx
    import wx.xrc 
    from wx.lib.intctrl import IntCtrl
    from wx.lib.masked import NumCtrl
     
     
    class FormPersonne ( wx.Frame ):
     
    	def __init__( self, parent ):
    		wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 843,512 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )
    		bSizer1 = wx.BoxSizer( wx.VERTICAL )
    		self.m_staticText3 = wx.StaticText( self, wx.ID_ANY, u"MONTANT", wx.DefaultPosition, wx.DefaultSize, 0 )
    		self.m_staticText3.Wrap( -1 )
    		bSizer1.Add( self.m_staticText3, 0, wx.ALL, 5 )
    		self.m_montant = NumCtrl( self, wx.ID_ANY, value=0, pos=wx.DefaultPosition, size=wx.DefaultSize,style= 0,integerWidth = 15, fractionWidth = 2,autoSize=True )
    		bSizer1.Add( self.m_montant, 0, wx.ALL, 5 )
    		self.SetSizer( bSizer1 )
    		self.Layout()
    		self.Centre( wx.BOTH )
     
    	def __del__( self ):
    		pass
     
     
    if __name__ == '__main__':
    	app = wx.App()
    	frame = FormPersonne(None)
    	montantString='1234,56'
    	montant=float(montantString.replace(',','.'))
    	print(montant,type(montant))
    	frame.m_montant.SetValue(montant) 
    	frame.Show()
    	app.MainLoop()
    A charge de revanche ...

    Fernando.

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 03/05/2006, 14h15
  2. [HTML] affichage d'un text brut dans un tableau
    Par fren2809 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 07/10/2005, 14h57
  3. Affichage du titre des colonnes dans un DBGrid
    Par Debure dans le forum C++Builder
    Réponses: 6
    Dernier message: 06/10/2005, 00h41
  4. Affichage d'une Applet Jbuilder dans IE
    Par DeveloppeurIndependant dans le forum Applets
    Réponses: 7
    Dernier message: 08/07/2004, 11h22
  5. [C#] Recupération d'un decimal dans un DataReader
    Par niPrM dans le forum Accès aux données
    Réponses: 7
    Dernier message: 28/05/2004, 11h10

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