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()