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

  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