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 :

variables locales ou pas


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut variables locales ou pas
    Bonjour,
    j'ai quelques difficultées à traiter les valeurs de différentes variables entre mes fonctions...
    ci dessous, le code... simplifié "au max" pour pouvoir le lire rapidement...

    Dans la fonction "initialisation" j'aimerais pouvoir assigner des valeurs à mes variables x,y et theta (via les valeurs issues des spin boutons... jusque là pas de souci)... mais ensuite, j'aimerais les réutiliser dans mes foncitons "dessin_graphique" et "représentation_table".

    malgré mes recherches, je n'arrive pas à utiliser mes variables x,y et theta à l'intérieur des fonctions "dessin_graphique" et "représentation_table"....

    ou est-ce que je m'y prend mal?
    merci

    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
    from PyQt5 import QtCore
    from PyQt5.QtWidgets import *
    from PyQt5.QtCore import *
    from PyQt5.QtGui import *
    import os,sys
    import numpy as np
    from pylab import *
     
     
    class fenPrincipale(QMainWindow):
        def __init__(self):
            QMainWindow.__init__(self)
            fenetre_widget = QWidget()
     
            self.table_considere=QSpinBox()
            self.table_considere.setRange(2,50)
            self.nb_points=QSpinBox()
            self.nb_points.setRange(3, 350)
     
            LayoutV=QVBoxLayout()
            LayoutV.addWidget(self.table_considere)
            LayoutV.addWidget(self.nb_points)
     
            fenetre_widget.setLayout(LayoutV)
            self.setCentralWidget(fenetre_widget)
     
            self.nb_points.valueChanged.connect(self.dessin_graphique)
            self.table_considere.valueChanged.connect(self.representation_table)
     
        def dessin_graphique(self,theta,y):
            self.initialisation
            print(theta*x*y)
     
        def representation_table(self,theta):
            self.initialisation
            print((theta*x)/y)
        def initialisation(self,x,y):
            theta = 10
            x = 3
            y = 2
     
    def main(args):
        appli=QApplication(args)
        fenetre=fenPrincipale()
        fenetre.show()
        r=appli.exec_()
        return r
     
    if __name__=="__main__":
        main(sys.argv)

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Quel est le but poursuivit ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        def dessin_graphique(self,theta,y):
            self.initialisation
            print(theta*x*y)
     
        def representation_table(self,theta):
            self.initialisation
            print((theta*x)/y)
        def initialisation(self,x,y):
            theta = 10
            x = 3
            y = 2
    Si tu veux appeler la méthode initialisation il faut mettre des parenthèses et de plus elle prend deux arguments dont on se demande à quoi ils servent puisque tu fixes les valeurs de x et y dans cette méthode.

    D'où ma question, que veux-tu faire exactement ?

  3. #3
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    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 062
    Par défaut
    Si tu veux les réutiliser, tu dois exprimer clairement que ces variables appartiennent à l'objet créé (instance)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def initialisation(self,x,y):
        self.theta = 10
        self.x = 3
        self.y = 2
    En admettant que tes fonctions dessin_graphique et représentation_table soient des fonctions utilisées après la méthode initialisation, ce qui me semble d'après le nom de cette méthode (initialisation) cohérent.

  4. #4
    Invité
    Invité(e)
    Par défaut variable locales ou pas
    Bonjour,
    oui c'est vrai que dans "initialisation" les variables sont fixée (dans les lignes que j'ai collé) mais dans l'application finale, les valeur x, y et theta sont des valeurs traitées en fonction de deux valeurs renseignées dans des spinbox (dans l'exemple que j'ai collé je les ai fixé pour me simplifier la tache et voir si j'arrive à les faire passer à travers différents appel de fonctions).

    Au final, j'aimerais que lors du changement de valeurs des spinbox il y ait automatiquement une mise à jour du traitement de ces valeurs via "dessin graphique" ou "représentation table" qui sont, en fait, liées (chacune) à une des deux spinbox de ma fenetre principale...

    la ou je bloque c'est que j'arrive pas à faire suivre les valeurs de mes spinbox dans mes fonction de traitement...

    j'avais fais une version du programme qui marchait mais je le trouvais un peu répétitif... en fait, le traitement de toutes les variables était refait à l'identique dans chacune des fonctions... et le traitment était lourd.. (c'est pour ça que je l'ai viré avant de le proposer en exemple). J'ai voulu sortir ces répétitions un peu lourdes en les remplaçant par un appel de traitement (que j'ai appelé initialisation)... mais j'arrive pas à faire les liens entre les variables...

    je sais pas si j'ai été clair...

    en tout cas merci pour vos réponses!

  5. #5
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Tout d'abord, tu dois avoir une erreur ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        def dessin_graphique(self,theta,y):
    le signal de la spinBox ne contient qu'une valeur, pas deux.

    Pour le passage des valeurs, tu fais comme fred1599 t'a dit, tu en fait des attributs d'instance avec self.

  6. #6
    Invité
    Invité(e)
    Par défaut variables
    bonjour,
    merci pour vos réponses et votre aide!
    j'arrive à me dépatouiller dans mes variables!
    merci encore

Discussions similaires

  1. Réponses: 10
    Dernier message: 02/07/2012, 17h30
  2. Réponses: 0
    Dernier message: 02/09/2008, 12h14
  3. Variable locale ou pas ?
    Par Maxence45 dans le forum Langage
    Réponses: 52
    Dernier message: 03/04/2007, 22h41
  4. Réponses: 3
    Dernier message: 15/06/2006, 16h43
  5. variables locales ou globales ???
    Par elvivo dans le forum C
    Réponses: 13
    Dernier message: 03/07/2002, 08h22

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