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 :

récupérer une variable d'une fonction dans une classe


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 136
    Par défaut récupérer une variable d'une fonction dans une classe
    Bonjour,

    j'ai une classe principale "gae" qui contient plusieurs fonctions, dans la partie initialisation, j'ai besoin de récupérer le contenu d'une variable (ip_alim) qui est dans une fonction de la classe "gae" .

    la variable ip_alim renvoi une chaine de caractère qui est une adresse ip obtenu à partir d'une sélection d'une liste d'un comboBox.

    mon but est quand je sélectionne un nom Wiener de la liste je récupère son adresse ip comme label affiché à coté.

    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
     
    	   	self.ip1="192.168.124.128"
    	   	self.ip2="192.168.124.129"
    	   	self.ip3="192.168.124.130"
    	   	self.ip4="192.168.124.131"	   	
                    self.select_alim = gtk.ComboBox(self.liststore)
    	 	self.liststore.append(['Wiener 1',self.ip1])
    	   	self.liststore.append(['Wiener 2',self.ip2])
    	   	self.liststore.append(['Wiener 3',self.ip3])
    	   	self.liststore.append(['Wiener 4',self.ip4])
    	  	self.cell = gtk.CellRendererText ()
    	  	self.select_alim.pack_start (self.cell)
    	   	self.select_alim.add_attribute (self.cell, 'text', 0)  
    	   	self.hbox_frame2.pack_start(self.select_alim, False, False, 0)
    	   	self.select_alim.connect('changed', self.get_ip)
    	   	self.select_alim.set_active(0)
    	   	self.label_ip_alim=gtk.Label(ip_alim)
    	   	self.hbox_frame2.pack_start(self.label_ip_alim, False, False, 0)
    et pour la fonction get_ip :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	def get_ip(self, select_alim):
    		modele = select_alim.get_model()
    		index = select_alim.get_active()
    		if index:
    			ip_alim = modele[index][1]
    j'ai eu l'erreur suivante:
    self.label_ip_alim=gtk.Label(ip_alim)
    NameError: global name 'ip_alim' is not defined

    Je suis débutant, quelqu'un a une idée ?
    Merci.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 70
    Par défaut
    Débutant moi aussi, je peux te dire que pour qu'une variable soit visible/utilisable dans toutes les fonctions de ta classe, tu lui mets self devant.
    Ce qui te donne self.ip_alim au lieu de ip_alim
    Attention, tous tes ip_alim doivent s'appeler self.ip_alim ensuite...

    C'est une idée.... Mais bon, je suis débutant hein

  3. #3
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut
    c'est tout à fait ça.

    Mais en fait on met "self" que si le premier argument de la méthode est nommé self. Donc, on met le nom du premier argument de la méthode devant le nom de variable que l'on veut être un attribut d'instance.

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 136
    Par défaut
    oui mais j'ai déjà essayé ça et ça marche pas, j'ai mis self.ip_alim et j'ai eu l'erreur suivante:
    File "gae.py", line 119, in __init__
    self.label_ip_alim=gtk.Label(self.ip_alim)
    AttributeError: Gae instance has no attribute 'ip_alim'

    ma classe est comme suit:
    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
    class Gae:	
    	"Définition d'une classe principale Gestion des alimentations électriques"	
    	def __init__(self):
    	   	self.ip1="192.168.124.128"
    	   	self.ip2="192.168.124.129"
    	   	self.ip3="192.168.124.130"
    	   	self.ip4="192.168.124.131"
    	   	self.liststore= gtk.ListStore(str, str)
    	   	self.select_alim = gtk.ComboBox(self.liststore)
     
    	   	self.liststore.append(['Wiener 1',self.ip1])
    	   	self.liststore.append(['Wiener 2',self.ip2])
    	   	self.liststore.append(['Wiener 3',self.ip3])
    	   	self.liststore.append(['Wiener 4',self.ip4])
    	  	self.cell = gtk.CellRendererText ()
    	  	self.select_alim.pack_start (self.cell)
    	   	self.select_alim.add_attribute (self.cell, 'text', 0)  
    	   	self.hbox_frame2.pack_start(self.select_alim, False, False, 0)
     
    	   	self.select_alim.connect('changed', self.get_ip)
    	   	self.select_alim.set_active(0)
    	   	self.label_ip_alim=gtk.Label(self.ip_alim)
    	   	self.hbox_frame2.pack_start(self.label_ip_alim, False, False, 0)
    	def get_ip(self, select_alim):
    		modele = select_alim.get_model()
    		index = select_alim.get_active()
    		if index:
    			self.ip_alim = modele[index][1]	
    def boucle():	
    	gtk.main()
    if __name__ == '__main__':
    	Gae()		
      	boucle()
    Merci

  5. #5
    Membre émérite
    Homme Profil pro
    Inscrit en
    Décembre 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 758
    Par défaut
    bonjour,

    tu fais référence à self.ip_alim avant de l'avoir définie.
    il faut donc que ton __init__ fasse appel à ta méthode get_ip avant d'utiliser self.ip_alim dans le corps de __init__.

  6. #6
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 136
    Par défaut
    Merci beaucoup kango,
    ça marche maintenant mais à l'exécution il m'affiche seulement un label d'adresse ip et quand je change dans le comboBox le label reste fixe.
    voici le code pour me comprendre:
    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
    class Gae:	
    	"Définition d'une classe principale Gestion des alimentations électriques"	
    	def __init__(self):
    	   	self.ip1="192.168.124.128"
    	   	self.ip2="192.168.124.129"
    	   	self.ip3="192.168.124.130"
    	   	self.ip4="192.168.124.131"
    	   	self.liststore= gtk.ListStore(str, str)
    	   	self.select_alim = gtk.ComboBox(self.liststore)
     
    	   	self.liststore.append(['Wiener 1',self.ip1])
    	   	self.liststore.append(['Wiener 2',self.ip2])
    	   	self.liststore.append(['Wiener 3',self.ip3])
    	   	self.liststore.append(['Wiener 4',self.ip4])
    	  	self.cell = gtk.CellRendererText ()
    	  	self.select_alim.pack_start (self.cell)
    	   	self.select_alim.add_attribute (self.cell, 'text', 0)  
     
                    self.get_ip(self.select_alim) # appel de get_ip 
     
                    self.hbox_frame2.pack_start(self.select_alim, False, False, 0)
    	   	self.select_alim.connect('changed', self.get_ip)
    	   	self.select_alim.set_active(0)
    	   	self.label_ip_alim=gtk.Label(self.ip_alim)
    	   	self.hbox_frame2.pack_start(self.label_ip_alim, False, False, 0)
    	def get_ip(self, select_alim):
    		modele = select_alim.get_model()
    		index = select_alim.get_active()
    		if index:
    			self.ip_alim = modele[index][1]	
    def boucle():	
    	gtk.main()
    if __name__ == '__main__':
    	Gae()		
      	boucle()
    normalement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.select_alim.connect('changed', self.get_ip)
    me renvoi une adresse ip qui correspond au nom selectionné dans le comboBox.

    mais il m'affiche toujours l'adresse ip 4 qui est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.ip4="192.168.124.131"
    qu'est ce qu'il manque ?

    Merci.

Discussions similaires

  1. Récupération de la valeur d une variable elle même contenue dans une variable
    Par guiplongeur dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 16/03/2015, 16h23
  2. Réponses: 2
    Dernier message: 14/05/2014, 10h23
  3. Réponses: 3
    Dernier message: 13/12/2009, 17h04
  4. [MySQL] récupérer dans une boucle chaque information MySQL dans une variable différente
    Par gtenthorey dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/05/2007, 22h34
  5. Réponses: 1
    Dernier message: 17/01/2007, 21h52

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