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 :

Pb affichage dans treeview


Sujet :

GTK+ avec Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 20
    Points : 17
    Points
    17
    Par défaut Pb affichage dans treeview
    Bonjour,

    Je débute en python et comme tout le monde il fallait bien que je tente de faire mumuse avec les treeview, liststore etc...


    j'ai repris un script qui permet de lister des repertoires et fichiers :
    adresse du script listefichiers.py

    http://mcclinews.free.fr/python/pygt...Renderers.html

    script ci-dessous :
    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
     
    #!/usr/bin/env python
     
    import os, stat, time
    import pygtk
    pygtk.require('2.0')
    import gtk
     
    dossierxpm = [
        "17 16 7 1",
        "  c #000000",
        ". c #808000",
        "X c yellow",
        "o c #808080",
        "O c #c0c0c0",
        "+ c white",
        "@ c None",
        "@@@@@@@@@@@@@@@@@",
        "@@@@@@@@@@@@@@@@@",
        "@@+XXXX.@@@@@@@@@",
        "@+OOOOOO.@@@@@@@@",
        "@+OXOXOXOXOXOXO. ",
        "@+XOXOXOXOXOXOX. ",
        "@+OXOXOXOXOXOXO. ",
        "@+XOXOXOXOXOXOX. ",
        "@+OXOXOXOXOXOXO. ",
        "@+XOXOXOXOXOXOX. ",
        "@+OXOXOXOXOXOXO. ",
        "@+XOXOXOXOXOXOX. ",
        "@+OOOOOOOOOOOOO. ",
        "@                ",
        "@@@@@@@@@@@@@@@@@",
        "@@@@@@@@@@@@@@@@@"
        ]
    dossierpb = gtk.gdk.pixbuf_new_from_xpm_data(dossierxpm)
     
    fichierxpm = [
        "12 12 3 1",
        "  c #000000",
        ". c #ffff04",
        "X c #b2c0dc",
        "X        XXX",
        "X ...... XXX",
        "X ......   X",
        "X .    ... X",
        "X ........ X",
        "X .   .... X",
        "X ........ X",
        "X .     .. X",
        "X ........ X",
        "X .     .. X",
        "X ........ X",
        "X          X"
        ]
    fichierpb = gtk.gdk.pixbuf_new_from_xpm_data(fichierxpm)
     
    class ExplListeFichiersFoncDonnees:
        noms_colonnes = ['Nom', 'Taille', 'Mode', 'Derniere modification']
     
        def evnmt_delete(self, widget, evnmt, donnees=None):
            gtk.main_quit()
            return False
     
        def __init__(self, dossier = None):
            fonct_donnees_cell = (None, self.taille_fichier, self.mode_fichier,
                                  self.modif_fichier)
     
            # Creation d'une nouvelle fenetre
            self.fenetre = gtk.Window(gtk.WINDOW_TOPLEVEL)
     
            self.fenetre.set_size_request(400, 300)
     
            self.fenetre.connect("delete_event", self.evnmt_delete)
     
            modeleliste = self.creer_liste(dossier)
     
            # Creation du TreeView
            self.treeview = gtk.TreeView()
     
            # Creation des TreeViewColumn pour afficher les donnees
            self.tvcolumn = [None] * len(self.noms_colonnes)
            cellpb = gtk.CellRendererPixbuf()
            self.tvcolumn[0] = gtk.TreeViewColumn(self.noms_colonnes[0], cellpb)
            self.tvcolumn[0].set_cell_data_func(cellpb, self.fichier_pixbuf)
            cell = gtk.CellRendererText()
            self.tvcolumn[0].pack_start(cell, False)
            self.tvcolumn[0].set_cell_data_func(cell, self.nom_fichier)
            self.treeview.append_column(self.tvcolumn[0])
            for n in range(1, len(self.noms_colonnes)):
                cell = gtk.CellRendererText()
                self.tvcolumn[n] = gtk.TreeViewColumn(self.noms_colonnes[n], cell)
                if n == 1:
                    cell.set_property('xalign', 1.0)
                self.tvcolumn[n].set_cell_data_func(cell, fonct_donnees_cell[n])
                self.treeview.append_column(self.tvcolumn[n])
     
            self.treeview.connect('row-activated', self.ouvrir_fichier)
            self.fenetredefilmt = gtk.ScrolledWindow()
            self.fenetredefilmt.add(self.treeview)
            self.fenetre.add(self.fenetredefilmt)
            self.treeview.set_model(modeleliste)
     
            self.fenetre.show_all()
            return
     
        def creer_liste(self, dossier=None):
            if not dossier:
                self.nomrep = os.path.expanduser('~')
            else:
                self.nomrep = os.path.abspath(dossier)
            self.fenetre.set_title(self.nomrep)
            fichiers = [f for f in os.listdir(self.nomrep) if f[0] <> '.']
            fichiers.sort()
            fichiers = ['..'] + fichiers
            modeleliste = gtk.ListStore(object)
            for f in fichiers:
                modeleliste.append([f])
            return modeleliste
     
        def ouvrir_fichier(self, treeview, chemin, colonne):
            modele = treeview.get_model()
            iter = modele.get_iter(chemin)
            nomfichier = os.path.join(self.nomrep, modele.get_value(iter, 0))
            statsfichier = os.stat(nomfichier)
            if stat.S_ISDIR(statsfichier.st_mode):
                nouvmodele = self.creer_liste(nomfichier)
                treeview.set_model(nouvmodele)
            return
     
        def fichier_pixbuf(self, colonne, cell, modele, iter):
            nomfichier = os.path.join(self.nomrep, modele.get_value(iter, 0))
            statsfichier = os.stat(nomfichier)
            if stat.S_ISDIR(statsfichier.st_mode):
                pb = dossierpb
            else:
                pb = fichierpb
            cell.set_property('pixbuf', pb)
            return
     
        def nom_fichier(self, colonne, cell, modele, iter):
            cell.set_property('text', modele.get_value(iter, 0))
            return
     
        def taille_fichier(self, colonne, cell, modele, iter):
            nomfichier = os.path.join(self.nomrep, modele.get_value(iter, 0))
            statsfichier = os.stat(nomfichier)
            cell.set_property('text', statsfichier.st_size)
            return
     
        def mode_fichier(self, colonne, cell, modele, iter):
            nomfichier = os.path.join(self.nomrep, modele.get_value(iter, 0))
            statsfichier = os.stat(nomfichier)
            cell.set_property('text', oct(stat.S_IMODE(statsfichier.st_mode)))
            return
     
     
        def modif_fichier(self, colonne, cell, modele, iter):
            nomfichier = os.path.join(self.nomrep, modele.get_value(iter, 0))
            statsfichier = os.stat(nomfichier)
            cell.set_property('text', time.ctime(statsfichier.st_mtime))
            return
     
    def main():
        gtk.main()
     
    if __name__ == "__main__":
        exemple = ExplListeFichiersFoncDonnees()
        main()
    j'ai voulu faire la meme chose mais a partir d'un fichier texte qui ressemble a cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    drwxrwx---   7 lulu     38468        4096 Oct 18 17:56 .
    drwxrwx---   7 lulu     38468        4096 Oct 18 17:56 ..
    drwxr-xr-x  15 lulu    38468        4096 Jan  9  2010 momo
    drwxr-xr-x   2 lulu     38468        4096 Jul  9  2008 portal
    drwxrwxrwx   5 lulu     38468        4096 Jan  4  2010 tata
    drwxr-xr-x   2 lulu     38468        4096 Oct 18 22:33 toto
    drwxrwxrwx   5 lulu     38468        4096 Aug 24 10:32 lulu
    j'arrive a charger la colonne des noms mais le reste m'affiche la derniere valeur prise par la variable de la colonne et se repete...(drwxrwxrwx *7)

    mon code modifié (en gras) :

    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
    #!/usr/bin/env python
    
    import os, stat, time
    import pygtk
    pygtk.require('2.0')
    import gtk
    
    dossierxpm = [
        "17 16 7 1",
        "  c #000000",
        ". c #808000",
        "X c yellow",
        "o c #808080",
        "O c #c0c0c0",
        "+ c white",
        "@ c None",
        "@@@@@@@@@@@@@@@@@",
        "@@@@@@@@@@@@@@@@@",
        "@@+XXXX.@@@@@@@@@",
        "@+OOOOOO.@@@@@@@@",
        "@+OXOXOXOXOXOXO. ",
        "@+XOXOXOXOXOXOX. ",
        "@+OXOXOXOXOXOXO. ",
        "@+XOXOXOXOXOXOX. ",
        "@+OXOXOXOXOXOXO. ",
        "@+XOXOXOXOXOXOX. ",
        "@+OXOXOXOXOXOXO. ",
        "@+XOXOXOXOXOXOX. ",
        "@+OOOOOOOOOOOOO. ",
        "@                ",
        "@@@@@@@@@@@@@@@@@",
        "@@@@@@@@@@@@@@@@@"
        ]
    dossierpb = gtk.gdk.pixbuf_new_from_xpm_data(dossierxpm)
    
    fichierxpm = [
        "12 12 3 1",
        "  c #000000",
        ". c #ffff04",
        "X c #b2c0dc",
        "X        XXX",
        "X ...... XXX",
        "X ......   X",
        "X .    ... X",
        "X ........ X",
        "X .   .... X",
        "X ........ X",
        "X .     .. X",
        "X ........ X",
        "X .     .. X",
        "X ........ X",
        "X          X"
        ]
    fichierpb = gtk.gdk.pixbuf_new_from_xpm_data(fichierxpm)
    
    class ExplListeFichiersFoncDonnees:
        noms_colonnes = ['Nom', 'Taille', 'Mode', 'Derniere modification']
    
        def evnmt_delete(self, widget, evnmt, donnees=None):
            gtk.main_quit()
            return False
     
        def __init__(self, dossier = None):
            fonct_donnees_cell = (None, self.taille_fichier, self.mode_fichier,
                                  self.modif_fichier)
     
            # Creation d'une nouvelle fenetre
            self.fenetre = gtk.Window(gtk.WINDOW_TOPLEVEL)
     
            self.fenetre.set_size_request(400, 300)
     
            self.fenetre.connect("delete_event", self.evnmt_delete)
     
            modeleliste = self.creer_liste(dossier)
     
            # Creation du TreeView
            self.treeview = gtk.TreeView()
     
            # Creation des TreeViewColumn pour afficher les donnees
            self.tvcolumn = [None] * len(self.noms_colonnes)
            cellpb = gtk.CellRendererPixbuf()
            self.tvcolumn[0] = gtk.TreeViewColumn(self.noms_colonnes[0], cellpb)
            self.tvcolumn[0].set_cell_data_func(cellpb, self.fichier_pixbuf)
            cell = gtk.CellRendererText()
            self.tvcolumn[0].pack_start(cell, False)
            self.tvcolumn[0].set_cell_data_func(cell, self.nom_fichier)
            self.treeview.append_column(self.tvcolumn[0])
            for n in range(1, len(self.noms_colonnes)):
                cell = gtk.CellRendererText()
                self.tvcolumn[n] = gtk.TreeViewColumn(self.noms_colonnes[n], cell)
                if n == 1:
                    cell.set_property('xalign', 1.0)
                self.tvcolumn[n].set_cell_data_func(cell, fonct_donnees_cell[n])
                self.treeview.append_column(self.tvcolumn[n])
    
            self.treeview.connect('row-activated', self.ouvrir_fichier)
            self.fenetredefilmt = gtk.ScrolledWindow()
            self.fenetredefilmt.add(self.treeview)
            self.fenetre.add(self.fenetredefilmt)
            self.treeview.set_model(modeleliste)
     
            self.fenetre.show_all()
            return
    
    
       
    
        def creer_liste(self, dossier=None):
                     
            scan = open('/tmp/result_command.txt', 'r')
            lines = scan.readlines()  
            result_fic = []
            for i in lines:
             decoupe = i.split()[8]
             print decoupe
             global tata         
             tata = i.split()[0]
             if decoupe[0] <> '.':
              print tata
             
             if decoupe[0] <> '.':
              result_fic.append(decoupe)
            scan.close()        
            fichiers2 = result_fic  
            fichiers2 = ['..'] + fichiers2
            modeleliste2 = gtk.ListStore(object)
            for f in fichiers2:
                modeleliste2.append([f])
            return modeleliste2
    
    
        
    
        def ouvrir_fichier(self, treeview, chemin, colonne):
            modele = treeview.get_model()
            iter = modele.get_iter(chemin)
            nomfichier = os.path.join(self.nomrep, modele.get_value(iter, 0))
            statsfichier = os.stat(nomfichier)
            if stat.S_ISDIR(statsfichier.st_mode):
                nouvmodele = self.creer_liste(nomfichier)
                treeview.set_model(nouvmodele)
            return
    
        def fichier_pixbuf(self, colonne, cell, modele, iter):
            nomfichier = os.path.join(self.nomrep, modele.get_value(iter, 0))
            statsfichier = os.stat(nomfichier)
            if stat.S_ISDIR(statsfichier.st_mode):
                pb = dossierpb
            else:
                pb = fichierpb
            cell.set_property('pixbuf', pb)
            return
    
        def nom_fichier(self, colonne, cell, modele, iter):
            cell.set_property('text', modele.get_value(iter, 0))
            return
    
        def taille_fichier(self, colonne, cell, modele, iter):
            cell.set_property('text', tata)
            return
    
        def mode_fichier(self, colonne, cell, modele, iter):
            nomfichier = os.path.join(self.nomrep, modele.get_value(iter, 0))
            statsfichier = os.stat(nomfichier)
            cell.set_property('text', oct(stat.S_IMODE(statsfichier.st_mode)))
            return
    
    
        def modif_fichier(self, colonne, cell, modele, iter):
            nomfichier = os.path.join(self.nomrep, modele.get_value(iter, 0))
            statsfichier = os.stat(nomfichier)
            cell.set_property('text', time.ctime(statsfichier.st_mtime))
            return
    
    def main():
        gtk.main()
    
    if __name__ == "__main__":
        exemple = ExplListeFichiersFoncDonnees()
        main()
    resultat (ce que je met dans la colonne est juste pour le test pas grave si cela n'est pas une taille de fichier)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Nom  Taille 
    ..
    momo drwxrwxrwx
    portal drwxrwxrwx 
    tata drwxrwxrwx
    toto drwxrwxrwx
    lulu drwxrwxrwx

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 20
    Points : 17
    Points
    17
    Par défaut Une soluce bofbof mais une soluce quand même...
    Bon ba j'ai trouvé une solution python + shell unix
    il faut intervenir directement dans la fonction et en fonction du nom du fichier je récupère la valeur dans la colonne souhaité grâce à un grep...
    cela doit pouvoir ce faire en python (équivalent du grep) mais je ne suis pas un crack de python donc si quelqu'un à une idée je suis preneur.

    C'est pas génial mais cela fonctionne ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def mode_fichier2(self, colonne2, cell2, modele2, iter):
            nomfichier2 = (modele2.get_value(iter, 0))
            if nomfichier2[0] <> '.':
             statsfichier2 = commands.getoutput('grep '+nomfichier2+' /tmp/result_command.txt | awk \'{print $1}\'')
             cell2.set_property('text', str(statsfichier2))
             return

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mauvaise affichage dans un TreeViewer
    Par asusx77vn dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 23/11/2012, 18h29
  2. [WD16] Affichage dans un treeview
    Par kirikou84 dans le forum WinDev
    Réponses: 5
    Dernier message: 09/05/2012, 13h08
  3. Problème affichage icon dans treeView
    Par midos_ab dans le forum JSF
    Réponses: 2
    Dernier message: 01/02/2011, 16h00
  4. Affichage dans un TreeView
    Par kabil.cpp dans le forum Windows Forms
    Réponses: 4
    Dernier message: 10/09/2009, 11h46
  5. Problème d'affichage données champs récupérés dans Treeview
    Par Cazaux-Moutou-Philippe dans le forum WinDev
    Réponses: 6
    Dernier message: 22/10/2006, 14h33

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