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

Python Discussion :

Problème pour passer une variable sur plusieurs fonctions


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2011
    Messages : 57
    Points : 46
    Points
    46
    Par défaut Problème pour passer une variable sur plusieurs fonctions
    Bonjour,
    Dans le code ci-dessous, j'utilise PyQt4 pour ecrire des données dans un fichier Excel.
    Si tout se passe bien lorsque je valide, j'ai par contre un problème pour le bouton Quitter, je ne parviens pas à enregistrer le fichier...
    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
    # -*- coding: utf-8 -*-
    from PyQt4.QtGui import *
    from PyQt4.QtCore import *
    import os, sys
    from untitled import *
    import win32com.client as win32
    import win32com.client.dynamic
    from pywintypes import UnicodeType, TimeType
     
     
    class entree(QtGui.QDialog):
      def __init__(self, parent=None):
        super(entree, self).__init__(parent)
        self.setLayout(QtGui.QGridLayout())
     
        self.lab_NumDos = QtGui.QLabel(self.tr("Entrez le numéro de dossier :"))
        self.lab_NumProj = QtGui.QLabel("Entrez le numéro de projet:")
        self.lab_Longueur = QtGui.QLabel("Entrez la longueur :")
        self.entry_NumDos = QtGui.QLineEdit()
        self.entry_NumProj = QtGui.QLineEdit()
        self.entry_Longueur = QtGui.QLineEdit()
     
     
        widg_but = QtGui.QWidget()
        widg_but.setLayout(QtGui.QHBoxLayout())
        self.but_ok = QtGui.QPushButton('Valider')
        self.but_ko = QtGui.QPushButton('Annuler')
        widg_but.layout().addStretch()
        widg_but.layout().addWidget(self.but_ok)
        widg_but.layout().addWidget(self.but_ko)
        widg_but.layout().addStretch()
     
     
        self.layout().addWidget(self.lab_NumDos,0,0)
        self.layout().addWidget(self.entry_NumDos,0,1)
        self.layout().addWidget(self.lab_NumProj,1,0)
        self.layout().addWidget(self.entry_NumProj,1,1)
        self.layout().addWidget(self.lab_Longueur,2,0)
        self.layout().addWidget(self.entry_Longueur,2,1)
        self.layout().addWidget(widg_but,3,0,1,2)
     
        self.connect(self.but_ok,
                            SIGNAL("clicked()"),
                            self.valide);
     
        self.connect(self.but_ko,
                         SIGNAL("clicked()"),
                         self.Quitter);
     
      def valide(self):
        """ validation et entrée des données dans une feuille excel"""
        DEFAULT = 0.00
        DEFAULTINT = 0
        DEFAULTSTR = ""
        aDossier = self.entry_NumDos.text()
        aProjet = self.entry_NumProj.text()
        aCumul = self.entry_Longueur.text()
     
        # Démarrage excel
        excel = win32com.client.dynamic.Dispatch('Excel.Application')
        # Ouverture du fichier pour édition
        xls = excel.Workbooks.Open ('E:\TRAVAIL\NouveauCsc\Data\Book1.xls')
        excel.Visible = True
        sht = xls.Worksheets('Calcul')
        sht.Activate()
        #Ecriture
        sht.Cells(1,1).Value = float(aDossier)
        sht.Cells(2,1).Value = float(aProjet)
        sht.Cells(3,1).Value = float(aCumul)
     
      def Quitter(self):
        """enregistrement du fichier excel et quitter"""
        fichier = QFileDialog.getSaveFileName(self, "Enregistrer un fichier", QString(), "Fichier Excel (*.xls)") #QFileDialog s'affiche
        if fichier:
            xls.SaveAs(str(fichier))
            xls.Close()
            os.startfile (str(fichier))
            QtCore.SLOT('close()')
     
     
    if __name__=='__main__':
      import sys
      app=QtGui.QApplication(sys.argv)
      fen = entree()
      fen.show()
      sys.exit(app.exec_())
    En effet, si la boite de dialogue s'ouvre bien, pas moyen de sauvegarder et quitter, en raison de la portée de la variable "xls", j'obtiens le message:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Traceback (most recent call last):
      File "E:\TRAVAIL\NouveauCsc\encodage.py", line 87, in Quitter
        xls.SaveAs(str(fichier))
    NameError: global name 'xls' is not defined
    Ma question: Comment faire pour indiquer à python que xls est le fichier ouvert dans ma fonction "valide" ?
    Merci,

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 297
    Points : 36 794
    Points
    36 794
    Par défaut
    Salut,

    Essayez de remplacer les occurrences de "xls" par "self.xls".

    - W

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2011
    Messages : 57
    Points : 46
    Points
    46
    Par défaut
    Merci ! Cela fonctionne.
    Par contre je n'ai pas bien compris pourquoi en mettant "self", cette variable passe d'une fonction à l'autre

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 297
    Points : 36 794
    Points
    36 794
    Par défaut
    Citation Envoyé par pierre3401 Voir le message
    Merci ! Cela fonctionne.
    Par contre je n'ai pas bien compris pourquoi en mettant "self", cette variable passe d'une fonction à l'autre

    Dans ce cas, c'est que vous ne comprenez pas le code que vous voulez modifier, car dans le script, on y trouve déjà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class entree(QtGui.QDialog):
      def __init__(self, parent=None):
        super(entree, self).__init__(parent)
        self.setLayout(QtGui.QGridLayout())
     
        self.lab_NumDos = QtGui.QLabel(self.tr("Entrez le numéro de dossier :"))
    Vous trouverez des réponses dans tous les bons tutos "basiques".

    - W

Discussions similaires

  1. Passer uen valeur d'une variable sur plusieurs Form !
    Par Naografix dans le forum VB.NET
    Réponses: 8
    Dernier message: 22/11/2012, 14h25
  2. Fonctions setappdata et getappdata pour passer une variable dans 2 gui
    Par mihaispr dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 02/05/2009, 14h55
  3. Problême pour passer une variable dans un SelectCommand
    Par Thetonio007 dans le forum ASP.NET
    Réponses: 12
    Dernier message: 26/06/2007, 14h37
  4. Probléme pour insérer une variable dans un champs
    Par BOUTRAIS dans le forum Access
    Réponses: 2
    Dernier message: 11/04/2006, 22h45
  5. Utilisation d'une variable sur plusieurs unités
    Par Yamaneko dans le forum Langage
    Réponses: 2
    Dernier message: 05/06/2003, 11h23

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