Bonjour
J'ai un petit problème à l'initialisation d'un TreeView.
Je suis déjà arrivé à faire un bout de programme de test pour fabriquer dans la 1ere colonne un TreeViewColumn composé de 2 parties

cellule1=gtk.CellRendererToggle()
et
cellule2=gtk.CellRendererText()

je les ai assemblé dans un seul TreeViewColumn qui s'affiche correctement. BON ....

J'ai réussi à traiter l'affichage correct du CellRendererText()
par une fonction qui taggue chaque CellRendererText()
en fonction de la donnée correspondante
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
def mot_cle (self, colonne, cell, modele, iter):
        cell.set_property('text', modele.get_value(iter, 1))
qui est appelée comme ceci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
tvc_colonne.set_cell_data_func(cellule2, self.mot_cle)
Ca fonctionne aussi bon

C'est ici que çà se corse
Lorsque je veux tagguer cellule1 qui est un CellRendererToggle()
j'utilise la fonction
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
def tagguees(self, colonne, cell, modele, iter):
        cell.set_property('active',modele.get_value(iter, 3))
        return
qui elle aussi est appelé comme ceci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
tvc_colonne.set_cell_data_func(cellule1, self.tagguees)
Mais cela ne fonctionne pas. Les 2 alternatives sont les suivantes ou bien toutes les cases à cochées le sont ou bien aucune selon mes diverses tentatives alors que elles devraient être cochée ou pas selon la valeur correspondante de Etat soit True soit False
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
#!/usr/bin/env python
# -*- coding:Utf-8 -*-
 
 
import sys
try:
    import pygtk
    pygtk.require("2.0")
except:
    pass
try:
    import gtk
    import gobject
 
    import shelve
    import os
    import datetime
    import string
    import re # extraction d'expression regulière
 
 
except:
    sys.exit(1)
 
 
 
class Wine1:
	#This class represents all the wine information
 
	def __init__(self, Motcle="", Domaine="", Etat="", Reserve1="",Reserve2=""):
		self.Motcle=Motcle
                self.Domaine=Domaine
                self.Etat=Etat
                self.Reserve1=Reserve1
                self.Reserve2=Reserve2
 
 
	def getList(self):
		#This function returns a list made up of the
		#wine information.  It is used to add a wine to the
		#wineList easily
		return [self, self.Motcle,self.Domaine,self.Etat,self.Reserve1,self.Reserve2]
 
 
class GesPyTache:
    def AddWineListColumn1(self, title, columnId):
        column = gtk.TreeViewColumn(title, gtk.CellRendererText(), text=columnId)
        column.set_resizable(True)
        column.set_sort_column_id(columnId)
        self.wineView1.append_column(column)
 
    def tagguees(self, colonne, cell, modele, iter):
        cell.set_property('active',modele.get_value(iter, 3))
        return
 
    def mot_cle (self, colonne, cell, modele, iter):
        cell.set_property('text', modele.get_value(iter, 1))
 
    def AddWineListColumn_combo1(self, etat,titre, columnId):
 
        tvc_colonne=gtk.TreeViewColumn(titre)
        cellule1=gtk.CellRendererToggle()
        cellule1.set_property("activatable", True)
 
        cellule2=gtk.CellRendererText()
 
        cellule2.set_property('cell-background', 'yellow')
 
        tvc_colonne.pack_start(cellule1,False)
        tvc_colonne.pack_start(cellule2)
 
        # fixe les attributs du cell a la colonne idoine du liststore
 
        #tvc_colonne.set_attributes(cellule1, stock_id=columnId)
        # pour tagguer chaque ligne coche ou pas 
        tvc_colonne.set_cell_data_func(cellule1, self.tagguees)
        tvc_colonne.set_cell_data_func(cellule2, self.mot_cle)
        tvc_colonne.set_resizable(True)
        tvc_colonne.set_sort_column_id(columnId)
 
        self.wineView1.append_column(tvc_colonne)
 
    def on_Quit(self, widget,donnees):
        """
        Called when the application is going to quit
        """    
        gtk.main_quit()
        self.fenetre.destroy()
 
    def __init__(self):
        self.liststoretache=None
        self.fenetre = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.fenetre.set_title("Supervision et Pilotage des tâches")
        #self.fenetre.connect("destroy", gtk.main_quit, "WM destroy") # <------------ connecteur a changer pour ne pas quitter l'appli
        self.fenetre.connect("delete_event", self.on_Quit)
 
 
        self.fenetre.set_size_request(gtk.gdk.screen_width()-30, gtk.gdk.screen_height()-90) # a modifier pour affichage tout l'écran
 
 
        #self.fenetre.set_size_request(1200, 1000) # a modifier pour affichage tout l'écran
        self.fenetre.move(1,1)
        self.fenetre.set_border_width(5)
        # On cree une boite verticale (VBox) pour y placer nos boites
        # horizontales. Ainsi on peut empiler les boites horizontales
        # remplies de boutons les unes sur les autre dans la VBox.
        self.boite_v = gtk.VBox(False, 5)
        self.boite_v.set_border_width(1)
        self.fenetre.add(self.boite_v) # ajout dans la fenêtre d'un conteneur Ver
        self.boite_v.show() # surement pa indispensable cause show_all en bas        
 
 
 
 
 
        #étage création milieu de fenêtre avec 2 zones séparées à l'horizontale
        self.boite_milieuH = gtk.HBox(False, 0)
 
 
        # partie gauche de l'écran avec ajustement
        ajustementH = gtk.Adjustment(value=500, lower=100, upper=700)
        self.fenetre_defil1 = gtk.ScrolledWindow(hadjustment=ajustementH)
        #self.fenetre_defil1 = gtk.ScrolledWindow()
 
        #self.fenetre_defil1.set_resizable(True)
        self.fenetre_defil1.set_border_width(1)
        self.fenetre_defil1.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
 
        self.fenetre_defil1.set_size_request(900, 100)
 
 
        self.boite_milieuH.pack_start(self.fenetre_defil1, False, True, 5) # <-------2V la fenêtre ScrollBar
        self.fenetre_defil1.show() 
 
        self.fenetre_defil2 = gtk.ScrolledWindow()
        self.fenetre_defil2.set_border_width(1)
        self.fenetre_defil2.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
 
 
        self.boite_milieuH.pack_start(self.fenetre_defil2, True, True, 0) # <-------2V la fenêtre ScrollBar
        self.fenetre_defil2.show()
 
        #ajout de l'horizontal box dans la vertical box
        self.boite_v.pack_start(self.boite_milieuH, True, True, 0)
        self.boite_v2 = gtk.VBox(True, 5) # la c'est une 2eme instance
 
        #+++++++++++++++++++++++++++++++++++++++++++++++++++
        self.cWineObject = 0
        self.cMotcle=1
        self.cDomaine=2
        self.cEtat=3
        self.cReserve1=4
        self.cReserve2=5
 
 
        self.sMotcle="Mot cle"
        self.sDomaine="Domaine"
        self.sEtat="Etat"
        self.sReserve1="Voie 1"
        self.sReserve2="Voie 2"
 
 
 
 
        #Create the listStore Model to use with the wineView
        self.wineList1 = gtk.ListStore(gobject.TYPE_PYOBJECT            , gobject.TYPE_STRING
									, gobject.TYPE_STRING
                                                                        , gobject.TYPE_STRING
                                                                        , gobject.TYPE_STRING
									, gobject.TYPE_STRING)
 
 
 
        #Get the treeView from the List_store
        self.wineView1 = gtk.TreeView(self.wineList1)
        # a garder
        # autorise la recherche dans le treeview
        self.wineView1.set_search_column(0)
        # autorise le rearrangement par glisser-deposer
        self.wineView1.set_reorderable(True)
 
 
 
        #Add all of the List Columns to the wineView
        self.AddWineListColumn_combo1(self.sEtat,self.sMotcle, self.cMotcle)
        #self.AddWineListColumn1(self.sMotcle, self.cMotcle)
        self.AddWineListColumn1(self.sDomaine, self.cDomaine)
        self.AddWineListColumn1(self.sEtat, self.cEtat)
        self.AddWineListColumn1(self.sReserve1, self.cReserve1)
        self.AddWineListColumn1(self.sReserve2,self.cReserve2)
 
 
 
        self.fenetre_defil1.add(self.wineView1)
 
        #self.fenetre_defil1.show()
 
        #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
        # partie droite
        #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
        self.cWineObject = 0
        self.cTitre=1
        self.cDomaine=2
        self.cImportance=3
        self.cEtat=3
        self.cReserve1=4
        self.cReserve2=5
 
 
        self.sTitre="Sujet"
        self.sDomaine="Domaine"
        self.sImportance="Importance"
        self.sEtat="Etat"
        self.sReserve1="        "
        self.sReserve2="        "
 
        #Create the listStore Model to use with the wineView
 
 
        #self.fenetre_defil2.add(self.wineView)
        #++++++++++++++++++++++++++++++++++++++++++++++++++++++
        self.listmotcle=[]
        for i in range(25):
            self.listmotcle.append(["motcle%d"%i,"Job",False,"A%d"%i,"bidon"])
 
        for i in range(25):
            self.listmotcle.append(["aurmotcle%d"%i,"Personnel",True,"B%d"%i,"bidon autre"])
 
        for mot in self.listmotcle:
 
 
            New_Wine=Wine1(mot[0],mot[1],mot[2],mot[3],mot[4]) 
            self.wineList1.append(New_Wine.getList())
 
        # a garder
        # autorise la recherche dans le treeview
        self.wineView1.set_search_column(0)
 
 
 
        # autorise le rearrangement par glisser-deposer
        self.wineView1.set_reorderable(True)
 
 
 
 
 
        #++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
 
        # pavé 3ajout d'une barre de statut tout en bas de la fenêtre
        barre_de_status= gtk.Statusbar()
        self.boite_v.pack_end(barre_de_status, False, True, 0)
 
        self.fenetre.show_all()
 
if __name__ == "__main__":
    wine = GesPyTache()
    gtk.main()
Quelle est la modif à faire donc pour que selon la valeur de Etat la case soit cochée ou pas et ce pour chaque ligne ?

Merci de vos aides prises et précieuses