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 :

Pygtk probleme Treeview et initialisation CellRendererToggle()


Sujet :

GTK+ avec Python

Vue hybride

turboiii Pygtk probleme Treeview et... 24/03/2009, 17h06
turboiii pas de réponse 25/03/2009, 16h23
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 147
    Par défaut Pygtk probleme Treeview et initialisation CellRendererToggle()
    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

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 147
    Par défaut pas de réponse
    Bonjour,

    Il semble que ma question ne passionne pas les foules
    pourtant j'ai cherché peut-être mal
    sur le tuto PyGTK d'ailleurs excellent, ainsi que sur le forum adéquat.

    J'ai même consulté le site pygtk.org je n'ai pas été inspiré

    Je sais c'est une question de débutant, mais je ne pose pas cette question par facilité, mais parce que je n'ai pas trouvé

    Merci pour ceux qui savent de regarder mon truc.
    Dans le post précedent j'ai mis un petit module qui tourne et vous permet de voir le phénomène

Discussions similaires

  1. probleme avec l'initialisation de spring
    Par bousnguar dans le forum Spring
    Réponses: 4
    Dernier message: 19/08/2008, 12h59
  2. Réponses: 0
    Dernier message: 19/05/2008, 14h02
  3. PyGtk et treeView.
    Par heider dans le forum GTK+ avec Python
    Réponses: 2
    Dernier message: 08/04/2008, 20h39
  4. Réponses: 10
    Dernier message: 19/05/2004, 11h41

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