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 :

pb de division


Sujet :

wxPython

  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 84
    Par défaut pb de division
    Bonjour,

    J'ai un problème avec des divisions. En effet dans mon applis, j'ai deux barre de progression et sur la barre totale en fonction du nombre d'ip que je cherche, je divise. J'ai crée une fonction qui fait la division, arrondi au 1/10 et une autre fonction qui actualise mon affichage. Le problème est que si mon avancé est de 1 % et que j'ai 3 poste par exemple, la barre tot doit avancé de 0.3 %. Mais il m'affiche 0.0299999. C'est gênant car dernière ca plante une boucle à cause d'érreur de calcul.

    Voici mon code, juste si vous avez uen idée de meilleur fonction pour division ou bien si j'ai une erreur pour l'affichage.

    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
    #!/usr/bin/python
    # -*- coding: cp1252 -*-
     
    ###Librairies
    import wx                   #Permet d'accéder au wxWidgets (Interface graphique)
     
    ####
     
    nbip = 3
     
     
    class LesMenus(wx.Frame):
       def __init__(self, titre):
            wx.Frame.__init__(self, None, 1,title = titre, size = (800,600))
     
            ######### Insertion image
            self.scrollPane = wx.ScrolledWindow(self , -1, pos = (0,0), size = (800,600))
    	#########
            ########## Fonction de division
            def div(a, b):
                resu = round(a/b, 1)
                return resu
            ##########    
            ########## Fonction de connection   Pb affichage
            def actualisation(nbrstot, nbrtot):
                ####### Actualisation compteur et pourcentage
                ####
                self.count = self.count + nbrstot
                self.counttot = self.counttot + nbrtot
                self.gauge.SetValue(self.count)
                self.gauge2.SetValue(self.counttot)
                ####
                #### Actualisation Pourcentage
                self.pretext22 = wx.StaticText(self.scrollPane, 1, repr(self.count) + "%", pos = (750,400), style = wx.ALIGN_RIGHT)
                self.pretext32 = wx.StaticText(self.scrollPane, 1, repr(self.counttot) + "%", pos = (750,500), style = wx.ALIGN_RIGHT)
                self.Update()                  #Update de l'affichage
                if nbrstot == 0 and nbrtot == 0:
                    return self.count
                ####
                #######
            #########
     
            ########## Initialisation Barre de progression
            self.count = 0.0                       #Initialisation compteur pour barre progression sous tot 
            self.counttot = 0.0                    #Initialisation compteur pour barre progression totale
            self.pretext1 = wx.StaticText(self.scrollPane, 1, "Barre de progression", pos = (0,375), style = wx.ALIGN_CENTER)
            ## Bar de prog sous total
            self.pretext2 = wx.StaticText(self.scrollPane, 1, "Sous total :", pos = (0,400), style = wx.ALIGN_CENTER)
            self.pretext22 = wx.StaticText(self.scrollPane, 1, repr(self.count) + "%", pos = (750,400), style = wx.ALIGN_CENTER)
            self.gauge = wx.Gauge(self.scrollPane, -1, pos = (0,425), size = (800,50))
            ##
            ## Bar de prog total
            self.pretext3 = wx.StaticText(self.scrollPane, 1, "Total :", pos = (0,500), style = wx.ALIGN_CENTER)
            self.pretext32 = wx.StaticText(self.scrollPane, 1, repr(self.counttot) + "%", pos = (750,500), style = wx.ALIGN_CENTER)
            self.gauge2 = wx.Gauge(self.scrollPane, -1, pos = (0,525), size = (800,50))
            self.Update()                          #Update de l'affichage
            ##########
            actualisation(1.0, div(1.0, nbip))                          #Actualisation barre 1, 1/nbip
     
    class MonApp(wx.App):
       def OnInit(self):
            fen = LesMenus("CISCO TOOLS V1.5")
            fen.Show(True)
            self.SetTopWindow(fen)
            return True
     
    app = MonApp()
    app.MainLoop()
    Voila c'est un bout de code qui est fonctionnel seul.


    EDIT : J'ai résolu le problème d'affichage en remplaçant cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.pretext32 = wx.StaticText(self.scrollPane, 1, repr(self.counttot) + "%", pos = (750,500), style = wx.ALIGN_RIGHT)
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.pretext32 = wx.StaticText(self.scrollPane, 1, "%.1f %%"%self.counttot, pos = (750,500), style = wx.ALIGN_RIGHT)

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 035
    Par défaut
    Bon c'est resolu, mais tu peux aussi utiliser le module decimal


  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 84
    Par défaut
    Résolu oui mais malgré tout je suis pas trop convaincu de ma division. A l'affichage si j'ai 1 /3 = 0.3 comme voulu c'est bon mais je pense que j'ai des problème d'arrondit en faisant plusieurs division mais ca c'est une autre histoire.

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

Discussions similaires

  1. [TP]Division de longs entiers
    Par Pebg dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 14/12/2003, 12h10
  2. [LG]a divise par b
    Par backsync dans le forum Langage
    Réponses: 8
    Dernier message: 22/10/2003, 21h37
  3. division de "double" par "0"
    Par ickis dans le forum C
    Réponses: 14
    Dernier message: 31/08/2003, 19h09
  4. Fonction divisant argument de type inconnu
    Par Nasky dans le forum C
    Réponses: 9
    Dernier message: 29/07/2003, 00h32
  5. probleme avec une division par zéro
    Par jcharleszoxi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/03/2003, 18h14

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