Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 14/06/2012, à 12:14

PengouinPdt

python, fichier glade, et __getitem__

Bonjour...

Je m'essaye à python, à la gestion de fichier glade... big_smile

Je souhaiterai savoir s'il est possible d'appeler les items par self.nomItem, au lieu de self['nomItem'].

De ce que j'ai compris, par l'usage de la méthode __getitem__, tel que :

def __getitem__(self, key):
        #return self.gui.get_widget(key)    # libglade
        return self.gui.get_object(key)    # gtkbuilder

je peux ensuite appeler mes items par self['idItem'] ... c'est bien, soit. (ou 'idItem' est le nom donné à l'object dans le fichier glade).
Mais j'aimerais plutôt pouvoir les appeler par self.idItem, est-ce possible, certainement, mais je comprends pas comment faire ?!

En espérant avoir été clair big_smile

Dernière modification par PengouinPdt (Le 14/06/2012, à 12:15)


Ego ~
YUP.py :: Yet Uploader Pixxie.py :: script python : post d'images sur forum !

Hors ligne

#2 Le 14/06/2012, à 12:40

Jules Petibidon

Re : python, fichier glade, et __getitem__

Tu peux utliser la méthode __getattr__, genre ça :

class B(object):
    def __init__(self):
        self.values = {'a':5,'b':6,'c':7}
    def __getattr__(self, key):
        return self.values.get(key, 0)
    
b = B()
b.c
7
b.d
0

Je sais pas si c'est un super conseil que je te donne en même temps... smile

Hors ligne

#3 Le 14/06/2012, à 16:03

PengouinPdt

Re : python, fichier glade, et __getitem__

Merci, mais ça ne semble pas être bon ! ;-)


Ego ~
YUP.py :: Yet Uploader Pixxie.py :: script python : post d'images sur forum !

Hors ligne

#4 Le 14/06/2012, à 16:58

Jules Petibidon

Re : python, fichier glade, et __getitem__

Un peu plus d'informations sur le problème rencontré ?

Hors ligne

#5 Le 14/06/2012, à 23:06

PengouinPdt

Re : python, fichier glade, et __getitem__

beh, justement, j'ai donné les informations que j'ai.

Je souhaite créer les variables dynamiques à partir des id des objects contenus dans le fichier glade.

Si :

def __getitem__(self, key):
        #return self.gui.get_widget(key)    # libglade
        return self.gui.get_object(key)    # gtkbuilder

Me permet d'utiliser le code suivant : self['idItem']

Si je veux utiliser, en lieu et place, self.idItem, il me faut faire pour chaque objet :

self.idItem = self['idItem']

Sauf que les objects se multipliant dans un fichier glade, s'il y en a dix, il me faut créer dix fois la variable correspondante.
Bref, autant d'object, y'a-t-il, autant de variables, je me dois d'écrire.

Il y a certainement moyen de les créer dynamiquement, du style 'self.idItem' ;-)


Ego ~
YUP.py :: Yet Uploader Pixxie.py :: script python : post d'images sur forum !

Hors ligne

#6 Le 15/06/2012, à 08:38

Keldath

Re : python, fichier glade, et __getitem__

Salut,

Pourtant, la réponse de Jules semble adéquate, c'est __getattr__ qu'il te faut utiliser. Seulement, l'appel à cette "magic method" ne se fera seulement si l'attribut recherché n'existe pas dans __dict__ :

class B(object):
    def __init__(self):
        self.a = "Foo"
        self.values = {'a':5,'b':6,'c':7}
    def __getattr__(self, key):
        return self.values.get(key, 0)

b = B()
b.a
'Foo'
b.c
7
b.d
0

Quelle version de Python utilises-tu ?

Hors ligne

#7 Le 15/06/2012, à 10:50

PengouinPdt

Re : python, fichier glade, et __getitem__

Keldath a écrit :

Salut,

Pourtant, la réponse de Jules semble adéquate, c'est __getattr__ qu'il te faut utiliser. Seulement, l'appel à cette "magic method" ne se fera seulement si l'attribut recherché n'existe pas dans __dict__ :

class B(object):
    def __init__(self):
        self.a = "Foo"
        self.values = {'a':5,'b':6,'c':7}
    def __getattr__(self, key):
        return self.values.get(key, 0)

b = B()
b.a
'Foo'
b.c
7
b.d
0

Le code, là, je le comprends ... sauf que là tu gères l'appel à tes variables en étant extérieur à ta classe.
Tu crées un objet 'b' et tu lui attribues les variables a, c, ou d...

Moi, je suis dans la classe ... et mon appel est interne.

Donc, je ne peux pas faire :

    def __getattr(self, key) :
        return self.self.get(key, 0)

puisque la méthode spéciale __getitem__, tel que présenté dans le premier post, me retourne des objects 'self['idItem']', qui appartiennent à mon premier objet nommé 'gui'  ...

Quelle version de Python utilises-tu ?

Celle, en cours, sur U 12.04 LTS : à savoir 2.7.3 ;-)

Dernière modification par PengouinPdt (Le 15/06/2012, à 11:05)


Ego ~
YUP.py :: Yet Uploader Pixxie.py :: script python : post d'images sur forum !

Hors ligne

#8 Le 15/06/2012, à 11:11

PengouinPdt

Re : python, fichier glade, et __getitem__

C'est bon !!!

J'ai trouvé et c'est vraiment tout couillon :

def __getattr__(self, key):
        return self.gui.get_object(key)

Cela me permet d'appeler mes objects, directement par 'self.idItem' où idItem est l'id donné à l'objet enfant ...
et, non plus par 'self['idItem']' ...

Merci à vous deux de m'avoir mis sur la piste big_smile

++


Ego ~
YUP.py :: Yet Uploader Pixxie.py :: script python : post d'images sur forum !

Hors ligne