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 :

Global name is not define?


Sujet :

Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 32
    Points : 13
    Points
    13
    Par défaut Global name is not define?
    Bonjour à tous,
    Voila j'ai une question que je n'arrive pas à résoudre, je m'explique j'ai un petit programme qui demande à l'utilisateur de saisir dans un lineEdit le chemin d'un dossier par exemple : c:/Design

    J'ai donc créer une fonction de ce type:

    def Folder(self):
    Dossier = self.lineEdit.text()
    print Dossier

    Mon souci c'est que je voudrais récupérer le contenu de la chaine de caractère Dossier dans une autre fonction et je n'y arrive pas j'ai toujours l'erreur de complilation global name is not define!

    Merci de votre aide je suis débutant en python

  2. #2
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def Folder(self):
        Dossier = self.lineEdit.text()
    Ici Dossier est un objet local de Folder. Il n'est pas visible en dehors de la fonction. Utilisez self.
    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
    class Foo(object):
        def folder(self):
            self.Dossier = 'dossier'
     
        def folder1(self):
            Dossier= 'Dossier'
     
        def get_dossier(self):
            print(self.Dossier)
     
        def get_dossier1(self):
            print(Dossier)
     
    f = Foo()
    f.folder()
    f.get_dossier()
    f.folder1()
    f.get_dossier1()
    Output
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    dossier
    Traceback (most recent call last):
      File "testtop.py", line 18, in <module>
        f.get_dossier1()
      File "testtop.py", line 12, in get_dossier1
        print(Dossier)
    NameError: global name 'Dossier' is not defined
    @+

    PyQT sans les bases ? Bon courage.
    Merci d'utiliser le forum pour les questions techniques.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    Tu m'excuseras mais je ne vois pas ou tu récupères la chaine saisie par l'utilisateur dans ton code!

    car self.lineEdit.text() me récupère bien ce qu'inscrit l'utilisateur dans le champs et me l'affiche correctement dans la console Python.

  4. #4
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    C'est une question de visibilité*, pas sur PyQT.
    Merci de relire la réponse ou de reformuler la question.

    @+

    *
    Mon souci c'est que je voudrais récupérer le contenu de la chaine de caractère Dossier dans une autre fonction et je n'y arrive pas j'ai toujours l'erreur de complilation global name is not define!
    Merci d'utiliser le forum pour les questions techniques.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    Oui j'ai bien compris, que ma variable n'était visible que dans la fonction ma question était comment résoudre ce problème.

    Voici mon code de ma fenetre:

    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
    class Ui_Dialog1(object):
     
        def setupUi(self, Dialog1):
            Dialog1.setObjectName(_fromUtf8("Dialog1"))
            Dialog1.resize(474, 337)
            self.label = QtGui.QLabel(Dialog1)
            self.label.setGeometry(QtCore.QRect(50, 60, 121, 16))
            self.label.setObjectName(_fromUtf8("label"))
            self.lineEdit = QtGui.QLineEdit(Dialog1)
            self.lineEdit.setGeometry(QtCore.QRect(50, 80, 113, 20))
            self.lineEdit.setObjectName(_fromUtf8("lineEdit"))
            self.pushButton = QtGui.QPushButton(Dialog1)
            self.pushButton.setGeometry(QtCore.QRect(190, 80, 75, 23))
            self.pushButton.setObjectName(_fromUtf8("pushButton"))
     
            self.retranslateUi(Dialog1)
            QtCore.QMetaObject.connectSlotsByName(Dialog1)
            QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL("clicked()"), self.Folder)
     
     
        def retranslateUi(self, Dialog1):
            Dialog1.setWindowTitle(QtGui.QApplication.translate("Dialog1", "Dialog", None, QtGui.QApplication.UnicodeUTF8))
            self.label.setText(QtGui.QApplication.translate("Dialog1", "Please enter the folder : ", None, QtGui.QApplication.UnicodeUTF8))
            self.pushButton.setText(QtGui.QApplication.translate("Dialog1", "Ok", None, QtGui.QApplication.UnicodeUTF8))
     
     
        def Folder(self):
             Dossier = self.lineEdit.text()
             print Dossier
     
        def WriteFileI1(self):
             fichier = open("Chemin saisie par l'utilisateur","a")
             fichier.write("Coucou")
     
     
     
    if __name__ == "__main__":
        import sys
        app = QtGui.QApplication(sys.argv)
        Dialog1 = QtGui.QDialog()
        ui = Ui_Dialog1()
        ui.setupUi(Dialog1)
        Dialog1.show()
        sys.exit(app.exec_())
    Ma question est simple je veux récupérer le chemin saisie par l'utilisateur dans le lineEdit pour ensuite le ré-utiliser lorsque j'appelle ma fonction permettant d'écrire dans le fichier et ainsi préciser le répertoire ou sera enregistré le fichier.

  6. #6
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Re,

    C'est bien ce que je vous présente.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        def Folder(self):
            self.Dossier = self.lineEdit.text()
     
        def WriteFileI1(self):
            fichier = open(self.Dossier, "a")
            fichier.write("Coucou")
            fichier.close()
    note : Pensez aux balises code (# en haut) pour l'indentation svp.
    Merci d'utiliser le forum pour les questions techniques.

  7. #7
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 812
    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 : 3 812
    Points : 7 097
    Points
    7 097
    Par défaut
    PauseKawa a tout à fait raison, je plussois.

    Vous n'avez pas les bases suffisantes (apparemment) pour coder avec PyQt.

    QlineEdit renvoie un QString (voir la documentation), on est d'accord.

    Pour récupérer la valeur d'une fonction, tout dépend si vous utilisez PyQt avec de la POO ou simplement avec des fonctions.

    Avec des fonctions

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def Folder():
        Dossier = QlineEdit.text()
        return Dossier
     
    folder = Folder() # Notre QString
    # Suite du code
    Avec la POO, c'est exactement ce que fait PauseKawa, que vous dire de plus?

    Mon souci c'est que je voudrais récupérer le contenu de la chaine de caractère Dossier dans une autre fonction et je n'y arrive pas j'ai toujours l'erreur de complilation global name is not define!
    Avez-vous les notions suffisantes pour faire de la POO?

    self.quelquechose veut dire que quelquechose est un attribut appartenant à l'objet.

    Quand je vois votre code, je sais que vous utilisez QtDesigner et pour débuter c'est pas forcément une bonne idée, vaut mieux commencer par se taper le code à la main pour bien comprendre le principe.

    J'ai ajouté vite fait un petit code pour vous montrer à l'aide d'un bouton nommé 'copier', comment récupérer la valeur d'un QlineEdit pour le placer dans un autre QlineEdit.

    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
    #!/usr/bin/python
    # -*- coding:utf8 -*-
     
    import sys
    from PyQt4.QtGui import QApplication, QMainWindow, QLineEdit, QPushButton
    from PyQt4.QtCore import QRect, QString, SIGNAL
     
    class Fen(QApplication):
        def __init__(self, arg):
            QApplication.__init__(self, arg)
     
            self.main = QMainWindow()
            self.main.setGeometry(QRect(200, 200, 900, 800))
     
            self.line = QLineEdit(self.main)
            self.line.setGeometry(QRect(250, 250, 150, 50))
     
            self.line_2 = QLineEdit(self.main)
            self.line_2.setGeometry(QRect(250, 350, 100, 50))
     
            self.button = QPushButton(QString('Copier'), self.main)
            self.button.setGeometry(QRect(450, 250, 75, 50))
            self.button.connect(self.button, SIGNAL('clicked()'), self.execute)
     
            self.main.show()
            self.exec_()
     
        def execute(self):
            texte = self.line.text()
            self.line_2.setText(texte)
     
    f = Fen(sys.argv)
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 32
    Points : 13
    Points
    13
    Par défaut
    Je tenais à vous remercier, car cette fois-ci c'est Ok! et vous me débloquez vraiment!

    Je sais que commencer par Qt n'a peut etre pas été une bonne chose, mais j'étais pressé par le temps pour la création de mes fenetres! Car ceci est une partie de ce que je demande à faire à mon GUI!

    Encore merci de votre aide

    Bonne soirée

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

Discussions similaires

  1. [Python 2.X] Probleme de Global name not defined
    Par Sh0rtY dans le forum Général Python
    Réponses: 1
    Dernier message: 03/07/2014, 10h47
  2. [noob] global name not defined
    Par tiresias54 dans le forum Général Python
    Réponses: 3
    Dernier message: 15/10/2013, 10h43
  3. NameError: global name 'thread' is not defined
    Par Balbuzard dans le forum Général Python
    Réponses: 6
    Dernier message: 15/07/2009, 06h52
  4. références croisées objets NameError: global name is not defined
    Par loicmidy dans le forum Général Python
    Réponses: 2
    Dernier message: 13/06/2009, 15h41
  5. NameError: global name 'entr2' is not defined
    Par noquioz dans le forum Tkinter
    Réponses: 18
    Dernier message: 24/11/2008, 11h20

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