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

Tkinter Python Discussion :

Problème d'exécution d'une fonction


Sujet :

Tkinter Python

  1. #1
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut Problème d'exécution d'une fonction
    Bonjour,

    J'ai un petit souci avec une fonction de mon programme.
    Lors de l'ouverture de celui-ci et après avoir rentré un certain nombre de valeurs, j'ai la possibilité de lancer cette fonction qui va créer un doc .pdf avec une courbe via reportlab et des modules associés (en particulier reportlab.graphics.charts.lineplots, reportlab.graphics.charts.textlabels et reportlab.graphics).

    Ceci fonctionne très bien.
    Par contre si je souhaite modifier une valeur et relancer la fonction alors là c'est la catastrophe puisque les deux documents se superpose pour n'en faire qu'un seul...

    Actuellement la seule solution qui existe est d'arrêter le programme et de le relancer à chaque fois que l'on veut changer une valeur, ce qui risque de devenir très rapidement casse bonbon...

    J'aimerai donc savoir s'il existe un moyen de faire croire à cette maudite fonction que le programme se relance à chaque fois que je l'appelle. (ou quelques choses dans ce genre).

    Merci d'avance

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 053
    Points : 1 384
    Points
    1 384
    Par défaut
    et fermer le 1er doc avant d'ouvrir le second, c'est possible ?

  3. #3
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    Le programme ouvre le doc avec os.startfile et je le referme manuellement.

    Par acquis de conscience j'ai supprimé la commande startfile.

    Ça fait exactement le même problème.
    J'ai aussi essayé de renomer le nouveau doc, ça ne change rien...

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 053
    Points : 1 384
    Points
    1 384
    Par défaut
    se sont les données qui se superposent ?
    il faudrait que tu postes l'essentiel de ton code parce que je ne comprends pas trop.

  5. #5
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    Voilà une version simplifiée de mes codes:

    Lancement du programme principal: Prog_Princ.py

    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
    #-*- coding:utf-8 -*-
     
    import wx
    import os.path
    import Graph
     
     
    ID_EXPORT = 101
     
    class Root(wx.Frame):
        def __init__(self, titre):
            wx.Frame.__init__(self, None, -1, title = titre)
     
     
    ##---------------
    ## Création des barres de menus et status
    ##---------------
            menuFichier = wx.Menu()
            menuFichier.Append(ID_EXPORT, "Export pdf", "Exporte le projet")
            menuFichier.Append(wx.ID_EXIT, "Quitter", "Quitter l'application")
     
            menuBarre = wx.MenuBar()
            menuBarre.Append(menuFichier, "Fichier")
     
            self.SetMenuBar(menuBarre)
     
    ##---------------
    ## Création des Widgets
    ##---------------
    ##___________________
    ## Création des Font et Sizer
            font1 = wx.Font(8, wx.FONTFAMILY_DECORATIVE, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, False, 'Verdana')
            font2 = wx.Font(8, wx.FONTFAMILY_DECORATIVE, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, 'Verdana')
     
            sizerMenu_0 = wx.GridBagSizer()
            sizer_0 = wx.GridBagSizer()
            sizer_4 = wx.FlexGridSizer(cols = 5, hgap = 5, vgap = 5)
     
    ##____________________
    ## Création des Titres
            conteneurTitre1= wx.Panel(self, -1)
            conteneurTitre1.SetSizer(sizer_0)
            titre0 = wx.StaticText(conteneurTitre1, -1, u"EXEMPLE y = ax+b", style = wx.ALIGN_RIGHT)
            titre0.SetFont(font1)
     
            sizer_0.Add(titre0, (1,1))        
    ##____________________
    ## Création du coprs du programme
            conteneur0 = wx.Panel(self, -1)
            conteneur0.SetSizer(sizer_4)
     
     
            a = wx.StaticText(conteneur0, -1,
                                u"valeur de a:", style = wx.ALIGN_CENTRE)
            a.SetFont(font2)
            b = wx.StaticText(conteneur0, -1,
                                 u"valeur de b:", style = wx.ALIGN_CENTRE)
            b.SetFont(font2)
     
            self.a = wx.TextCtrl(conteneur0, -1,'', size = (100,-1))
            self.b = wx.TextCtrl(conteneur0, -1,'0', size = (100,-1))
     
            sizer_4.Add(a, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTRE_VERTICAL)
            sizer_4.Add(self.a, 0, wx.EXPAND)
            sizer_4.Add((0,0), 0, wx.EXPAND)
            sizer_4.Add(b, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTRE_VERTICAL)
            sizer_4.Add(self.b, 0, wx.EXPAND)
     
     
    ##____________________
    ## Disposition sur la fenêtre
            sizer_v = wx.BoxSizer(wx.VERTICAL)
            sizer_h = wx.BoxSizer(wx.HORIZONTAL)
     
            sizer_v.Add(conteneurTitre1, 0, wx.EXPAND)
            sizer_v.Add(conteneur0, 0, wx.EXPAND)
            self.SetSizer(sizer_v)
            sizer_v.SetSizeHints(self)
            self.SetSize((-1,-1))
    ##---------------
    ## Création des Méthodes
    ##---------------    
     
            wx.EVT_MENU(self, wx.ID_EXIT, self.OnExit)
            wx.EVT_MENU(self, ID_EXPORT, self.Export)
     
     
        def OnExit(self, evt):
            self.Destroy()
            evt.Skip()
     
        def Export(self,evt):
            A = float(self.a.GetValue())
            B = float(self.b.GetValue())
            file = 'Courbes projet'
            selection = wx.FileDialog(self, 'Enregistrer sous',"" , file,  wildcard = "*.pdf",
                                        style = wx.SAVE)
            retour = selection.ShowModal()
            chemin = selection.GetPath()
            fichier = selection.GetFilename()
            selection.Destroy()
     
            def f_1(x):
                y = A*x +B
                return y
     
            #Traçage de la courbe.
            if os.path.isfile("data_curve1.txt") == True:
                os.remove("data_curve1.txt")
     
            z = 0.001
            while z <= 10:
                y = f_1(z)
                txt = str(z) + ';' + str(y) + "\n"
                donnee = open("data_curve1.txt","a")
                donnee.write(txt)
                donnee.close()
                z = z + 0.1
     
            Graph.rapport(chemin)
     
    ##---------------
    ## Lancement de l'Application
    ##---------------   
    class MonApp(wx.App):
        def OnInit(self):
            fen = Root('Exemple')
            fen.Show(True)
            self.SetTopWindow(fen)
            return True
     
    app = MonApp()
    app.MainLoop()

    Lancement du graphique: Graph.py

    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
    # -*- coding:Latin-1 -*-
    import Creation_pdf as pdf
    import csv
     
    def rapport(chemin):
            fichier= csv.reader(open("data_curve1.txt", "rb"), delimiter=";")
            x = []
            y = []      
            for ligne in fichier:
                    data_x = float(ligne[0])
                    data_y = float(ligne[1])
                    x.append(data_x)
                    y.append(data_y)
            l_x = len (x)
            l_y = len (y)
     
            c_y = [tuple([(x[a], y[a]) for a in range(l_x)])]
     
            pdf.graph(c_y, x[l_x-1], y[l_y-1])
     
            pdf.go(chemin)

    Outils pour la création du doc .pdf: Creation_pdf.py

    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
    # -*- coding:Latin-1 -*-
     
    import os
    from reportlab.lib import colors
    from reportlab.graphics.shapes import *
    from reportlab.graphics import shapes
    from reportlab.graphics.charts.axes import XCategoryAxis,YValueAxis
    from reportlab.graphics.charts.lineplots import LinePlot
    import reportlab.graphics.charts.textlabels as label
    from reportlab.graphics.widgets.markers import makeMarker
     
    l = 600
    h = 850
    xtitre = l/2
    ytitre = h-40
    drawing = Drawing(l,h)
     
    ##Création des graphiques
    def graph(data, x, y):
        lp = LinePlot()
        lp.x, lp.y = 50, 280
        lp.width, lp.height = l-100, 200
        lp.data = data
        lp.joinedLines = 1
        lp.strokeColor = colors.black
        lp.xValueAxis.valueMin = 0
        lp.xValueAxis.valueMax = x
        lp.xValueAxis.valueStep = 1
        lp.xValueAxis.labelTextFormat = '%2.0f'
        lp.yValueAxis.valueMin = 0
        lp.yValueAxis.valueMax = y
        lp.yValueAxis.valueStep = 2
        drawing.add(lp)
     
    def go(path):
        from reportlab.graphics import renderPDF
        renderPDF.drawToFile(drawing, path)
        os.startfile(path)
    Désolé mais plus simple je peux pas...

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 053
    Points : 1 384
    Points
    1 384
    Par défaut
    les graphs se supperposent, c'est ça?

  7. #7
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    C'est exactement ça.
    Les codes que j'ai fourni sont très simplifiés et dans le code original, je reprends en tête du rapport un nom de projet, des valeurs... tout ça sous forme de string.

    Et j'ai le même problème avec.

    As-tu une idée?

  8. #8
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    Peut-être est-il possible de fermer mon application et de la relancer ensuite???

    Pour le moment je le fais avec un point bat et ça marche. Peut-être existe-t-il un meilleur moyen?

    Si quelqu'un à une idée?

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2008
    Messages : 52
    Points : 29
    Points
    29
    Par défaut
    salut
    Esaye de lancer le premier dans un tread
    puis le second dans un autres tread ?

    note je débute en python m'enfin sa pourrait marcher

  10. #10
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    Citation Envoyé par panthere_noire Voir le message
    salut
    Esaye de lancer le premier dans un tread
    puis le second dans un autres tread ?

    note je débute en python m'enfin sa pourrait marcher
    Si je comprends bien l'utilisation des Thread, il faut en créer autant qu'il y aura d'actions. Le problème c'est que je n'ai aucune idée du nombre de rapport que pourra demander l'utilisateur.

    Je vois pas bien comment faire.

  11. #11
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 053
    Points : 1 384
    Points
    1 384
    Par défaut
    quand tu modifies une données, comment effaces-tu l'ancien graph avant de dessiner le nouveau ?

  12. #12
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    Là je sens que je vais me faire taper dessus...

    Je l'efface pas...

  13. #13
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 053
    Points : 1 384
    Points
    1 384
    Par défaut
    avec ou sans élan ?

  14. #14
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut

    Bon je regarderai comment on fait une telle chose.
    Franchement je n'y avais pas pensé du tout.

    Par contre si tu sais comment faire d'une manière facile, hésite pas...

    (à choisir j'hésite,... peut-être sans ça suffira)

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2008
    Messages : 52
    Points : 29
    Points
    29
    Par défaut
    ben les tread c'est pas limmiter normalement tu peux en faire autemps que tu veux et comme c'est un double du prog, et que les 2 peuve dialoguer. tu peux donc changer a ta guise. évidement c'est plus compliquer a mettre en place mai c est très pratique

    sinon effectivement si t'efface rien

Discussions similaires

  1. problème d'exécution d'une fonction dans la base
    Par ramzi_iag dans le forum PL/SQL
    Réponses: 5
    Dernier message: 05/04/2011, 08h42
  2. [AC-2007] Problème d'exécution d'une fonction trouvé sur une faq
    Par sebac dans le forum VBA Access
    Réponses: 6
    Dernier message: 28/07/2009, 12h18
  3. Réponses: 14
    Dernier message: 10/01/2007, 10h12
  4. Réponses: 1
    Dernier message: 13/12/2006, 14h18
  5. Réponses: 7
    Dernier message: 12/03/2006, 21h18

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