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

GUI Python Discussion :

Appel de variable [Python 3.X]


Sujet :

GUI Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2022
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2022
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Appel de variable
    Bonjour,

    Je débute en python et je suis en train de créer une petite application dont le but est d'aller chercher un fichier .csv sur un serveur en ssh puis d'en traiter les données. Tout ce passe bien sauf lorsque je veux faire appel à une variable issus d'une sous-fonction.
    Globalement, mon code ressemble à ça:

    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
    class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
        def __init__(self, *args, obj=None, **kwargs):
            super(MainWindow, self).__init__(*args, **kwargs):
            #diverses définitions -> ok
     
            def Fonction1():
              #Connexion SSH -> ok
              if authentification == False:
                #message d'erreur
              else:
                #téléchargement du fichier et définition d'une variable (File_name)
                #contenant le nom du fichier téléchargé que je veux conserver -> Ok
                return File_name
     
        def Fonction2(self):
          File_name = Fonction1() #-> Erreur m'indiquant que "Fonction1()" n'est pas définit
          #Traitement des données utilisant comme base File_name pour trouver le nom du fichier à traiter
    J'ai essayé plusieurs combinaisons possibles avec ce que j'ai pu trouver sur les différents forums mais je n'arrive pas à résoudre mon problème, j'imagine que ça vient du fait que "File_name" se trouve dans "Fonction1()" qui est ou sous fonction de "__init__".

    Merci pour votre aide et n'hésitez pas si vous avez besoin de plus d'informations.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Pourquoi ne pas faire de Fonction1 une sous fonction de Fonction2 ou mieux une méthode à part entière?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2022
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2022
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    J'ai justement essayé de mettre "Fonction2" en sous fonction de "Fonction1 sauf que qu'entre "__init__" et "Fonction2", j'active une liste déroulante avec la possibilité de choisir entre plusieurs options permettant d'afficher ou non des widgets. En changeant l'organisations de mes fonctions je n'arrive pas à réactiver ma liste déroulante.
    Je n'ai pas tester l'option de mettre "Fonction2" dans une méthode à part entière mais le problème serait le même j'imagine ? Je ne pourrais pas appeler "File_name" dans la nouvelle méthode ?

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par AstroBot44 Voir le message
    Je n'ai pas tester l'option de mettre "Fonction2" dans une méthode à part entière mais le problème serait le même j'imagine ? Je ne pourrais pas appeler "File_name" dans la nouvelle méthode ?
    File_name est ce que retourne la fonction... pourvu qu'on puisse l'appeler.

    Citation Envoyé par AstroBot44 Voir le message
    J'ai justement essayé de mettre "Fonction2" en sous fonction de "Fonction1 sauf que qu'entre "__init__" et "Fonction2"...
    Vous ne devez pas essayer tout et n'importe quoi dans l'espoir que ça veuille bien tomber en marche mais réfléchir à ce que vous voulez faire et le coder proprement (éventuellement en essayant de coder des exemples plus simples pour réduire ce qu'il y a à maîtriser).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2022
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2022
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    File_name est ce que retourne la fonction... pourvu qu'on puisse l'appeler.
    C'est justement le coeur de mon problème... Je ne comprend pas pourquoi en appelant la fonction j'ai un message m'indiquant qu'elle n'est pas déclaré (alors qu'elle l'est juste au dessus).

    Vous ne devez pas essayer tout et n'importe quoi dans l'espoir que ça veuille bien tomber en marche mais réfléchir à ce que vous voulez faire..
    Je suis bien d'accord avec vous, loin de moi l'idées d'écrire sans réfléchir. Comme je vous l'ai indiqué je débute en python et il y a encore des concepts que je ne maitrise pas totalement, d'où ma demande d'aide

    J'ai fait une modification de mon code pour enlever les sous-fonctions et changer la variable de sortie pour clarifier le tout, j'ai maintenant :

    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
     
    class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
        def __init__(self, *args, obj=None, **kwargs):
            super(MainWindow, self).__init__(*args, **kwargs)
            #Declarations variable -> ok
     
        def Funct1(self, i):#authentification et pré-traitement des données
            authenticated = True#Pour le test
            if authentification == false
               print('Erreur authentification')
            else
               File_name = 'nom du fichier.csv'
     
               #Lecture du fichier csv
               with open(File_name, 'r')
                   #traitement du fichier
                   Data = #tableau de donnée
                   return Data #Ce que je veux réutiliser dans Funct2
     
        def Funct2(self,i)
           Data = Funct1() #-> ERREUR m'indiquant que Funct1 n'est pas définit...
           #suite du code
    Ce que je ne comprend pas c'est que j'ai fait un bout de code à part reprenant la même architectures, je déclare "Funct1" et "Funct2" à la suite et là pas de problème avec l'appel "Data = Funct1()" dans "Funct2"... Tout fonctionne...

    Deux différences subsistes entre mon code principal et mon bout de code test. Le premier c'est que dans mon test je n'ai pas déclaré mes deux fonctions dans une classe (ce qui je pense n'a pas d'importance car si je comprend bien (peut-être que non...) l'appel entre mes deux fonction ce fait à l'intérieur de la même classe donc il n'y a pas de raison pour que ça ne fonctionne pas). Et la deuxième différence réside dans le fait que dans mon code test, je ne déclare pas les paramètres 'self' et 'i', liés à l'affichage de fenêtres (non présente dans mon code test).

    Si le problème vient d'un de ces deux problèmes, je ne comprend pas en quoi cela influence l'appel de la fonction "Funct1" dans "Funct2".

    Merci pour votre aide.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par AstroBot44 Voir le message
    Ce que je ne comprend pas c'est que j'ai fait un bout de code à part reprenant la même architectures, je déclare "Funct1" et "Funct2" à la suite et là pas de problème avec l'appel "Data = Funct1()" dans "Funct2"... Tout fonctionne...
    Si function est "méthode", elle sera associée à un objet et ne pourra être appelée que via objet.function(...).
    Et si l'objet est "l'objet courant", on utilisera self.

    Si tout cela est embrouillé pour vous, ouvrez un tuto. apprenez les bases: actuellement vous ne savez pas faire la différence entre variable, fonction, méthode,... et si vous voulez programmer avec PyQT, vous avez besoin de maîtriser tout ça bien mieux.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

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

Discussions similaires

  1. [VB6] [Langage] VB6 et les appels de dll
    Par Dave63 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 16/01/2003, 18h20
  2. Appeler une fonction avec/sans parenthèses
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 29/12/2002, 18h48
  3. Réponses: 4
    Dernier message: 07/12/2002, 07h34
  4. Appel de procédure...
    Par AmaX dans le forum Langage
    Réponses: 4
    Dernier message: 24/11/2002, 17h48
  5. appel de fichier d'Aide
    Par Atrebate62 dans le forum Composants VCL
    Réponses: 5
    Dernier message: 24/09/2002, 14h13

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