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