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

GTK+ avec Python Discussion :

passage variable dans class (pygtk)


Sujet :

GTK+ avec Python

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    7
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Par d�faut passage variable dans class (pygtk)
    bonjour,

    je d�couvre python (et pygtk) petit a petit, et je me heurte � un probl�me, que j'arrive cependant � contourner.

    le code ci-dessous ne sert � rien (pour l'instant)
    le but du programme est cr�er des entry (un nombre variable) puis de pouvoir afficher le contenu. (plus tard, ces entry deviendront des treeview pour traiter du csv - nombre de colonnes variables)

    mon probl�me principal est le passage d'argument dans les evenements connect
    j'obtiens un comportement que je ne comprends pas

    Pour apercevoir les erreurs, voici ce qu'il faut faire
    1- lancer le pgm
    2- cr�er 3 entry (cliquer 3 fois sur ajouter colonne)
    3- si on clique sur afficher colonne 1 (en fait la 2�me), elle s'affiche et i est pass� en argument (on le voit dans le print i de la fonction afficher)
    4- si on clique sur afficher_tous, self.nombre_colonne ne passe pas en argument, je suis obliger de faire i=self.nombre_colonne dans la fonction ....

    voil� je ne saisis pas


    merci pour toute aide

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    # test avec entry
     
     
    import pygtk
    pygtk.require('2.0')
    import gtk
     
    class csv:
     
        # ici ca marche, i est passé en argument !
     
        def afficher(self, widget, i):
            print "i passé en argument ",i
            print "enregistrement"
            aff=self.col[i].get_text()
            print "contenu colonne ",i,"   " ,aff
     
     
        def afficher_tous(self,widget, i):
            print "argument i ",i
            print "afficher tous"
            # j'aimerais remplacer self.nombre_colonne par i)
            # car ici i n'est pas passe en argument ?????
            for j in range(self.nombre_colonne):
                aff=self.col[j].get_text()
                print aff
     
        def ajout(self, widget , i= None):
            # sortie pour controler la valeur de i ....
            print "ajout"
            print "avant",i
            # j'aimerais me passer de ca :
            i = self.nombre_colonne
            print "print",i
     
            self.col.append(gtk.Entry(max=30))
            self.col[i].set_text("debut")
            self.col[i].set_editable(True)
            self.boite1.pack_start(self.col[i],True, True, 0)
            self.col[i].show()
            self.nombre_colonne=self.nombre_colonne+1
            print "nb_colonne",self.nombre_colonne
     
     
        # Une autre fonction de rappel
        def evnmt_delete(self, widget, evenement, donnees=None):
            gtk.main_quit()
            return False
     
        def __init__(self):
     
     
            self.col = []
            self.nombre_colonne = 0
     
     
            # Création d'une nouvelle fenêtre
            self.fenetre = gtk.Window(gtk.WINDOW_TOPLEVEL)
            self.fenetre.set_title("essais colonnes")
            self.fenetre.connect("delete_event", self.evnmt_delete)
            self.fenetre.set_border_width(10)
     
            # ajout d'une boite pour l'avenir ....
            self.boite1 = gtk.HBox(False, 0)
            self.fenetre.add(self.boite1)
     
            # Création d'un nouveau bouton avec l'étiquette "afficher 1".
            self.bouton1 = gtk.Button("afficher 1 ")
            self.bouton1.connect("clicked", self.afficher, 1)
            self.boite1.pack_start(self.bouton1, True, True, 0)
            self.bouton1.show()
     
            # On répète les mêmes étapes pour créer un second bouton
            self.bouton2 = gtk.Button("afficher tous")
            self.bouton2.connect("clicked", self.afficher_tous,self.nombre_colonne)
            self.boite1.pack_start(self.bouton2, True, True, 0)
            self.bouton2.show()
     
            # Ajout bouton créer une nouvelle colonne
            self.bouton3 = gtk.Button("ajouter une colonne")
            self.bouton3.connect("clicked", self.ajout,self.nombre_colonne)
            self.boite1.pack_start(self.bouton3, True, True, 0)
            self.bouton3.show()
     
     
     
            self.boite1.show()
            self.fenetre.show()
     
     
     
     
    def boucle():
        gtk.main()
     
    if __name__ == "__main__":
        salut = csv()
        boucle()

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    7
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Par d�faut
    J'ai un peu progress� sur l'identification du probl�me

    j'ai modifi� mon code, quand on veut afficher la colonne, 1, l'argument passe par une variable self.pointeur=1
    la valeur est bien pass�e dans la fonction afficher

    au niveau de afficher tous, c'est self.nombre_colonne qui ne semble pas "rafraichi"

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    # exemple helloworld2.py
    # test avec entry
     
     
    import pygtk
    pygtk.require('2.0')
    import gtk
     
    class csv:
     
        # ici ca marche, i est passé en argument !
        def afficher(self, widget, i):
            print "i passé en argument ",i
            print "enregistrement"
            aff=self.col[i].get_text()
            print "contenu colonne ",i,"   " ,aff
     
     
        def afficher_tous(self, widget, i):
            print "argument i ",i
            print "afficher tous"
            # j'aimerais remplacer self.nombre_colonne par i)
            # car ici i n'est pas passe en argument ?????
            for j in range(self.nombre_colonne):
                aff=self.col[j].get_text()
                print aff
            print "nombre de colonnes ", self.nombre_colonne
     
        def ajout(self, widget , i= None):
            # sortie pour controler la valeur de i ....
            print "ajout"
            print "avant",i
            # j'aimerais me passer de ca :
            i = self.nombre_colonne
            print "print",i
     
            self.col.append(gtk.Entry(max=30))
            self.col[i].set_text("debut")
            self.col[i].set_editable(True)
            self.boite1.pack_start(self.col[i],True, True, 0)
            self.col[i].show()
            self.nombre_colonne=self.nombre_colonne+1
            print "nb_colonne",self.nombre_colonne
     
     
        # Une autre fonction de rappel
        def evnmt_delete(self, widget, evenement, donnees=None):
            gtk.main_quit()
            return False
     
        def __init__(self):
     
     
            self.col = []
            self.nombre_colonne = 0
            self.pointeur = 1
     
     
            # Création d'une nouvelle fenêtre
            self.fenetre = gtk.Window(gtk.WINDOW_TOPLEVEL)
            self.fenetre.set_title("essais colonnes")
            self.fenetre.connect("delete_event", self.evnmt_delete)
            self.fenetre.set_border_width(10)
     
            # ajout d'une boite pour l'avenir ....
            self.boite1 = gtk.HBox(False, 0)
            self.fenetre.add(self.boite1)
     
            # Création d'un nouveau bouton avec l'étiquette "afficher 1".
            self.bouton1 = gtk.Button("afficher 1 ")
            self.bouton1.connect("clicked", self.afficher, self.pointeur)
            self.boite1.pack_start(self.bouton1, True, True, 0)
            self.bouton1.show()
     
            # On répète les mêmes étapes pour créer un second bouton
            self.bouton2 = gtk.Button("afficher tous")
            self.bouton2.connect("clicked", self.afficher_tous,self.nombre_colonne)
            self.boite1.pack_start(self.bouton2, True, True, 0)
            self.bouton2.show()
     
            # Ajout bouton créer une nouvelle colonne
            self.bouton3 = gtk.Button("ajouter une colonne")
            self.bouton3.connect("clicked", self.ajout,self.nombre_colonne)
            self.boite1.pack_start(self.bouton3, True, True, 0)
            self.bouton3.show()
     
     
     
            self.boite1.show()
            self.fenetre.show()
     
     
     
     
    def boucle():
        gtk.main()
     
    if __name__ == "__main__":
        salut = csv()
        boucle()

  3. #3
    Membre �prouv� Avatar de awalter1
    Inscrit en
    Ao�t 2004
    Messages
    994
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2004
    Messages : 994
    Par d�faut
    L'argument self.nombre_colonne est pass� avec sa valeur au moment de l'ex�cution du connect, ce n'est pas sa valeur au moment du click qui est r�cup�r� dans la callback. Autrement dit, dans ton cas, ce param�tre ne sert � rien.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    7
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 7
    Par d�faut
    ok, je vais travailler par la

Discussions similaires

  1. [1.x] probleme passage variable dans le m�me module
    Par suiton dans le forum Symfony
    R�ponses: 5
    Dernier message: 17/08/2010, 19h43
  2. allocation de Variables dans classes
    Par MABB dans le forum C++
    R�ponses: 3
    Dernier message: 23/11/2007, 10h04
  3. passage variable dans page
    Par naje83 dans le forum G�n�ral JavaScript
    R�ponses: 14
    Dernier message: 04/05/2007, 18h31
  4. passage variable dans un lien
    Par splouf dans le forum ASP
    R�ponses: 5
    Dernier message: 04/05/2007, 15h12
  5. bean:define pour passage variable dans function javascript
    Par fbuchwalder dans le forum Struts 1
    R�ponses: 2
    Dernier message: 06/11/2006, 18h36

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