PyGTK - Classe TreeView
Le widget Treeview affiche le contenu d'un modèle implémentant l'interface gtk.TreeModel. PyGTK fournit les types de modèles suivants -
- gtk.ListStore
- gtk.TreeStore
- gtk.TreeModelSort
ListStore est un modèle de liste. Lorsqu'il est associé à un widget gtk.TreeView, il produit une zone de liste contenant les éléments à sélectionner. Un objet gtk.ListStore est déclaré avec la syntaxe suivante -
store = gtk.ListStore(column_type)
Une liste peut avoir plusieurs colonnes, les constantes de type prédéfinies sont -
- gobject.TYPE_BOOLEAN
- gobject.TYPE_BOXED
- gobject.TYPE_CHAR
- gobject.TYPE_DOUBLE
- gobject.TYPE_ENUM
- gobject.TYPE_FLOAT
- gobject.TYPE_INT
- gobject.TYPE_LONG
- gobject.TYPE_NONE
- gobject.TYPE_OBJECT
- gobject.TYPE_STRING
- gobject.TYPE_UCHAR
- gobject.TYPE_UINT
- gobject.TYPE_ULONG
- gtk.gdk.pixbuf etc.
Par exemple, un objet ListStore pour stocker des éléments de chaîne est déclaré comme -
store = gtk.ListStore(gobject.TYPE_STRING
Afin d'ajouter des éléments dans le magasin, les méthodes append () sont utilisées -
store.append (["item 1"])
TreeStore est un modèle de widget Tree à plusieurs colonnes. Par exemple, l'instruction suivante crée un magasin avec une colonne contenant un élément de chaîne.
Store = gtk.TreeStore(gobject.TYPE_STRING)
Afin d'ajouter des éléments dans un TreeStore, utilisez la méthode append (). La méthode append () a deux paramètres, parent et row. Pour ajouter un élément de niveau supérieur, le parent est Aucun.
row1 = store.append(None, ['row1'])
Vous devez répéter cette instruction pour ajouter plusieurs lignes.
Afin d'ajouter des lignes enfants, passez la ligne de niveau supérieur comme paramètre parent à la méthode append () -
childrow = store.append(row1, ['child1'])
Vous devez répéter cette instruction pour ajouter plusieurs lignes enfants.
Maintenant, créez un widget TreeView et utilisez l'objet TreeStore ci-dessus comme modèle.
treeview = gtk.TreeView(store)
Nous devons maintenant créer TreeViewColumn pour afficher les données du magasin. L'objet de gtk.TreeViewColumn gère l'en-tête et les cellules à l'aide de gtk.CelRenderer. L'objet TreeViewColumn est créé à l'aide du constructeur suivant -
gtk.TreeViewColumn(title, cell_renderer,…)
En plus du titre et du moteur de rendu, il faut zéro ou plusieurs paires attribut = colonne pour spécifier à partir de quelle colonne de modèle d'arbre la valeur de l'attribut doit être extraite. Ces paramètres peuvent également être définis à l'aide des méthodes de la classe TreeViewColumn ci-dessous.
Un gtk.CellRenderer est une classe de base pour un ensemble d'objets pour le rendu de différents types de données. Les classes dérivées sont CellRendererText, CellRendererPixBuf et CellRendererToggle.
Les méthodes suivantes de la classe TreeViewColumn sont utilisées pour configurer son objet -
TreeViewColumn.pack_start (cell, expand = True) - Cette méthode emballe l'objet CellRenderer dans la colonne de début. Si le paramètre de développement est défini sur True, tout l'espace alloué des colonnes est affecté à la cellule.
TreeViewColumn.add_attribute (cellule, attribut, colonne) - Cette méthode ajoute un mappage d'attribut à la liste dans la colonne de l'arborescence. lecolumn est la colonne du modèle d'arbre.
TreeViewColumn.set_attributes () - Cette méthode définit les emplacements d'attribut du renderer en utilisant le attribute = column paires
TreeViewColumn.set_visible () - Si True, la colonne de l'arborescence est visible
TreeViewColumn.set_title () - Cette méthode définit la propriété "title" sur la valeur spécifiée.
TreeViewColumn.set_lickable () - S'il est défini sur True, l'en-tête peut prendre le focus clavier et être cliqué.
TreeViewColumn.set_alignment (xalign) - Cette méthode définit la propriété "alignement" sur la valeur de xalign.
Le signal "cliqué" est émis lorsque l'utilisateur clique sur le bouton d'en-tête de la colonne de l' arborescence .
Après avoir configuré l'objet TreeViewColumn, il est ajouté au widget TreeView à l'aide de la méthode append_column ().
Voici les méthodes importantes de la classe TreeView -
TreevVew.set_model () - Ceci définit la propriété "modèle" pour l'arborescence. Si l'arborescence a déjà un ensemble de modèles, cette méthode le supprimera avant de définir le nouveau modèle. Simodel est None, cela annulera l'ancien modèle.
TreeView.set_header_clickable () - Si défini sur True, les boutons de titre de colonne peuvent être cliqués.
TreeView.append_column () - Ceci ajoute le spécifié TreeViewColumn à la liste des colonnes.
TreeView.remove_column () - Cela supprime la colonne spécifiée de l'arborescence.
TreeView.insert_column () - Ceci insère le spécifié column dans l'arborescence à l'emplacement spécifié par position.
Le widget TreeView émet les signaux suivants -
curseur changé | Ceci est émis lorsque le curseur se déplace ou est défini. |
développer-réduire-curseur-ligne | Ceci est émis lorsque la ligne au niveau du curseur doit être développée ou réduite. |
activé par ligne | Ceci est émis lorsque l'utilisateur double-clique sur un treeview rangée |
ligne réduite | Ceci est émis lorsqu'une ligne est réduite par l'utilisateur ou l'action programmatique. |
ligne développée | Ceci est émis lorsqu'une ligne est développée via l'utilisateur ou l'action programmatique. |
Deux exemples du widget TreeView sont donnés ci-dessous. Le premier exemple utilise un ListStore pour produire un ListView simple.
Ici, un objet ListStore est créé et des éléments de chaîne y sont ajoutés. Cet objet ListStore est utilisé comme modèle pour l'objet TreeView -
store = gtk.ListStore(str)
treeView = gtk.TreeView()
treeView.set_model(store)
Ensuite, un CellRendererText est ajouté à un objet TreeViewColumn et le même est ajouté à TreeView.
rendererText = gtk.CellRendererText()
column = gtk.TreeViewColumn("Name", rendererText, text = 0)
treeView.append_column(column)
L'objet TreeView est placé sur la fenêtre de niveau supérieur en l'ajoutant à un conteneur Fixed.
Exemple 1
Respectez le code suivant -
import pygtk
pygtk.require('2.0')
import gtk
class PyApp(gtk.Window):
def __init__(self):
super(PyApp, self).__init__()
self.set_title("TreeView with ListStore")
self.set_default_size(250, 200)
self.set_position(gtk.WIN_POS_CENTER)
store = gtk.ListStore(str)
store.append (["PyQt"])
store.append (["Tkinter"])
store.append (["WxPython"])
store.append (["PyGTK"])
store.append (["PySide"])
treeView = gtk.TreeView()
treeView.set_model(store)
rendererText = gtk.CellRendererText()
column = gtk.TreeViewColumn("Python GUI Libraries", rendererText, text=0)
treeView.append_column(column)
fixed = gtk.Fixed()
lbl = gtk.Label("select a GUI toolkit")
fixed.put(lbl, 25,75)
fixed.put(treeView, 125,15)
lbl2 = gtk.Label("Your choice is:")
fixed.put(lbl2, 25,175)
self.label = gtk.Label("")
fixed.put(self.label, 125,175)
self.add(fixed)
treeView.connect("row-activated", self.on_activated)
self.connect("destroy", gtk.main_quit)
self.show_all()
def on_activated(self, widget, row, col):
model = widget.get_model()
text = model[row][0]
self.label.set_text(text)
def main():
gtk.main()
return
if __name__ == "__main__":
bcb = PyApp()
main()
L'élément sélectionné par l'utilisateur est affiché sur une étiquette dans la fenêtre en tant que on_activated callback la fonction est appelée.
Exemple 2
Le deuxième exemple crée un TreeView hiérarchique à partir d'un TreeStore. Ce programme suit la même séquence de construction du magasin, en le définissant comme modèle pour TreeView, en concevant un TreeViewColumn et en l'ajoutant à TreeView.
import gtk
class PyApp(gtk.Window):
def __init__(self):
super(PyApp, self).__init__()
self.set_title("TreeView with TreeStore")
self.set_size_request(400,200)
self.set_position(gtk.WIN_POS_CENTER)
vbox = gtk.VBox(False, 5)
# create a TreeStore with one string column to use as the model
store = gtk.TreeStore(str)
# add row
row1 = store.append(None, ['JAVA'])
#add child rows
store.append(row1,['AWT'])
store.append(row1,['Swing'])
store.append(row1,['JSF'])
# add another row
row2 = store.append(None, ['Python'])
store.append(row2,['PyQt'])
store.append(row2,['WxPython'])
store.append(row2,['PyGTK'])
# create the TreeView using treestore
treeview = gtk.TreeView(store)
tvcolumn = gtk.TreeViewColumn('GUI Toolkits')
treeview.append_column(tvcolumn)
cell = gtk.CellRendererText()
tvcolumn.pack_start(cell, True)
tvcolumn.add_attribute(cell, 'text', 0)
vbox.add(treeview)
self.add(vbox)
self.connect("destroy", gtk.main_quit)
self.show_all()
PyApp()
gtk.main()
Le TreeView suivant est affiché comme une sortie -