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 :

Tri par défaut des TreeView (sans click utilisateur)


Sujet :

GTK+ avec Python

  1. #1
    Invité
    Invité(e)
    Par défaut Tri par défaut des TreeView (sans click utilisateur)
    Bonjour,

    J'ai créé un gtk.TreeView dans lequel j'insère des gtk.TreeViewColumn (fonction append_column).
    Je rends ces colonne "triables" avec la fonction set_sort_column_id (j'utilisais aussi set_reorderable(True) mais c'est visiblement redondant avec set_sort_column_id qui l'active aussi).

    Quand je clique sur l'en-tête de la colonne, il trie correctement (et ça fait apparaître la petite flèche dans l'en-tête de la colonne).
    Ce que je voudrais, c'est pouvoir imposer un tri par défaut (qui fasse appraître la flèche, car au début elle n'apparaît même pas).

    D'avance merci.

  2. #2
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 329
    Points : 366
    Points
    366
    Par défaut
    Salut,

    Alors déjà, le "set_reorderable" ne permet pas de trier les lignes des colonnes, mais de réordonner les colonnes entre elles (un peu comme si dans Excel tu interchangeais les colonnes A et B).

    Ensuite, il y a un piège avec "set_sort_column_id" ; cette méthode existe pour les objets TreeViewColumn et TreeStore :
    • TreeViewColumn.set_sort_column_id sert à spécifier la colonne des valeurs à trier si celle-ci est différente de la colonne des données. Par exemple, si la colonne contient des Pixbufs, c'est pas triable donc on peut ajouter une colonne au modèle (liststore) avec un nombre entier qui correspond à une image. C'est cette fonction qui rend l'en-tête cliquable.
    • Treestore.set_sort_column_id semble être la fonction que tu cherches : elle permet de spécifier quelle colonne parmi celles du modèle (liststore) il faut trier. On peut lui ajouter un 2ème argument gtk.SORT_ASCENDING ou gtk.SORT_DESCENDING pour préciser l'ordre.


    -

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par monnomamoi Voir le message
    Salut,
    Alors déjà, le "set_reorderable" ne permet pas de trier les lignes des colonnes, mais de réordonner les colonnes entre elles (un peu comme si dans Excel tu interchangeais les colonnes A et B).
    J'ai bien fait d'en parler alors... :-) Effectivement, c'est autre chose. Du coup, je vais l'activer, car ça peut aussi s'avérer pratique.

    Citation Envoyé par monnomamoi Voir le message
    Ensuite, il y a un piège avec "set_sort_column_id" ; cette méthode existe pour les objets TreeViewColumn et TreeStore :
    • TreeViewColumn.set_sort_column_id sert à spécifier la colonne des valeurs à trier si celle-ci est différente de la colonne des données. Par exemple, si la colonne contient des Pixbufs, c'est pas triable donc on peut ajouter une colonne au modèle (liststore) avec un nombre entier qui correspond à une image. C'est cette fonction qui rend l'en-tête cliquable.
    J'aurais dit qu'il faut la spécifier dans tous les cas, non ? Même si c'est la colonne affichée (c'est-à-dire celle qui a l'attribut 'text'). Si je ne le fais pas, la colonne n'est pas triable.

    Voici un bout de code. La première colonne ("Folders") affiche le champ 0 du tree_store, et je trie sur le champ 1. La deuxième colonne ("Dates") affiche le champ 2 du tree_store, et je trie sur le même champ (2). Si je ne le précise pas, la colonne n'est pas cliquable.

    Au passage, tu noteras que j'ai déjà intégré ce que tu m'as suggéré ci-dessous (set_sort_column_id sur le tree_store) :-)

    self.tree_store = gtk.TreeStore(gobject.TYPE_STRING, # name
    gobject.TYPE_STRING, # sort name if available
    gobject.TYPE_STRING, # dates
    gobject.TYPE_STRING, # foreground color
    gobject.TYPE_STRING, # background color
    gobject.TYPE_UINT, # weight
    gobject)
    self.tree_view = gtk.TreeView(self.tree_store)
    self.tree_view.set_enable_tree_lines(True)

    self.column = gtk.TreeViewColumn("Folders")
    self.cell = gtk.CellRendererText()
    self.column.pack_start(self.cell)
    self.column.add_attribute(self.cell, 'text', 0)
    self.column.add_attribute(self.cell, 'foreground', 3)
    self.column.add_attribute(self.cell, 'background', 4)
    self.column.add_attribute(self.cell, 'weight', 5)
    self.column.set_reorderable(True)
    self.column.set_sort_column_id(1)
    self.tree_view.append_column(self.column)

    self.column = gtk.TreeViewColumn("Dates")
    self.cell = gtk.CellRendererText()
    self.column.pack_start(self.cell)
    self.column.add_attribute(self.cell, 'text', 2)
    self.column.add_attribute(self.cell, 'foreground', 3)
    self.column.add_attribute(self.cell, 'weight', 5)
    self.column.set_reorderable(True)
    self.column.set_sort_column_id(2)
    self.tree_view.append_column(self.column)

    self.tree_store.set_sort_column_id(2, gtk.SORT_ASCENDING)

    self.scrolled_window = gtk.ScrolledWindow()
    self.scrolled_window.add(self.tree_view)
    self.tree_view.connect('row-activated', self.row_activated_callback)


    Citation Envoyé par monnomamoi Voir le message
    • Treestore.set_sort_column_id semble être la fonction que tu cherches : elle permet de spécifier quelle colonne parmi celles du modèle (liststore) il faut trier. On peut lui ajouter un 2ème argument gtk.SORT_ASCENDING ou gtk.SORT_DESCENDING pour préciser l'ordre.
    Effectivement, c'est bien ça. Ca marche. Merci
    Comme tu as vu, je l'ai ajouté dans mon code ci-dessus.

  4. #4
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 329
    Points : 366
    Points
    366
    Par défaut
    Juste pour pinailler, je trouve que c'est plus "propre" de faire comme ceci :
    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
     
    self.tree_store = gtk.TreeStore(
        str, # name
        str, # sort name if available
        str, # dates
        str, # foreground color
        str, # background color
        int, # weight
        gobject
    )
    self.tree_view = gtk.TreeView(self.tree_store)
    self.tree_view.set_enable_tree_lines(True)
     
    column1 = gtk.TreeViewColumn("Folders",
        gtk.CellRendererText(),
        text=0,
        foreground=3,
        background=4,
        weight=5)
    column1.set_reorderable(True)
    column1.set_sort_column_id(1)
    self.tree_view.append_column(column1)
     
    column2 = gtk.TreeViewColumn("Dates",
        gtk.CellRendererText(),
        text=2,
        foreground=3,
        weight=5)
    column2.set_reorderable(True)
    column2.set_sort_column_id(2)
    self.tree_view.append_column(column2)
     
    self.tree_store.set_sort_column_id(2, gtk.SORT_ASCENDING)
     
    self.scrolled_window = gtk.ScrolledWindow()
    self.scrolled_window.add(self.tree_view)
    self.tree_view.connect('row-activated', self.row_activated_callback)

    Si c'est bon, pense au bouton

    -

  5. #5
    Invité
    Invité(e)
    Par défaut
    Tu as raison de pinailler. Ca m'intéresse ce genre de remarque. Je débute en python et en GTK, et je sais que beaucoup de choses ne sont pas écrites de la meilleure façon qu'il soit. Je me suis lancé dans le codage sans prendre le temps d'appréhender toutes les subtilités du langage Python, ni l'architecture de GTK.

    En même temps, je trouve que la doc officielle de pyGTK (Reference Manual + Tutorial) n'est pas toujours très claire... J'ai du mal à y trouver les informations que je cherche. L'API, les valeurs possibles des paramètres...
    Mais encore une fois c'est peut-être parce que je n'ai pas pris le temps d'avoir une vue d'ensemble sur GTK.

    Enfin bref, merci. J'attendais juste une réponse à ma remarque pour passer en Résolu

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

Discussions similaires

  1. Tri par défaut des TreeView (sans click utilisateur)
    Par Linux44 dans le forum GTK+ avec Python
    Réponses: 1
    Dernier message: 28/01/2012, 19h22
  2. Code par défaut des pages ASPX
    Par zooffy dans le forum Visual Studio
    Réponses: 9
    Dernier message: 13/05/2007, 14h40
  3. Ordre de tri par défaut
    Par garou34 dans le forum Installation
    Réponses: 4
    Dernier message: 21/09/2006, 15h54
  4. Réponses: 1
    Dernier message: 29/03/2006, 11h33
  5. Focus par défaut des alert() , confirm() et prompt()
    Par NoT dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 20/03/2006, 11h30

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