14.3. TreeViews (Vistas de árbol)

Un TreeView es fundamentalmente un contenedor de objetos de columna TreeViewColumn e intérpretes de celda CellRenderer que son los responsables de llevar a cabo en último término la visualización de los datos del almacén de datos. También aporta una interfaz para las filas de datos mostradas y para las características que controlan la visualización de esos datos.

14.3.1. Creación de un TreeView (vista de árbol)

Un TreeView se crea utilizando su constructor:

  treeview = gtk.TreeView(model=None)

donde model es un objeto que implementa la interfaz TreeModel (generalmente un ListStore o TreeStore). Si model es None o no se especifica, entonces el TreeView no estará asociado a un almacén de datos.

14.3.2. Obtención y establecimiento del Modelo de un TreeView

El modelo de árbol que proporciona el almacén de datos de un TreeView puede obtenerse utilizando el método get_model() :

  model = treeview.get_model()

Un TreeModel puede asociarse simultáneamente con más de un TreeView, que cambia automáticamente su visualización en el memento en el que cambian los datos del TreeModel. Mientras que unTreeView siempre muestra todas las filas de su modelo de árbol, permite mostrar selectivamente algunas de las columnas. Ello significa que dos TreeViews asociados al mismo TreeModel pueden realizar visualizaciones completamente distintas de los mismos datos.

Es también importante darse cuenta de que no existe relación preestablecida entre las columnas de un TreeView y las columnas de su TreeModel. Por tanto, la quinta columna de los datos de un TreeModel pueden mostrarse en la primera columna de un TreeView y en la tercera columna de otro.

Un TreeView puede cambiar su modelo de árbol utilizando el método set_model() :

  treeview.set_model(model=None)

donde model es un objeto que implementa la interfaz TreeModel (p.e. ListStore y TreeStore). Si model es None, entonces se descarta el modelo actual.

14.3.3. Definición de las propiedades de un TreeView

TreeView tiene una serie de propiedades que se pueden gestionar utilizando sus métodos:

"enable-search"Lectura-EscrituraSi es TRUE, el usuario puede hacer búsquedas a traves de las columnas de forma interactiva. Por defecto es TRUE
"expander-column"Lectura-EscrituraLa columna usada para el elemento de expansión. Por defecto es 0
"fixed-height-mode"Lectura-EscrituraSi es TRUE, asume que todas las filas tiene la misma altura, lo que acelera la visualización. Disponible a partir de GTK+ 2.4. Por defecto es FALSE
"hadjustment"Lectura-EscrituraEl control Adjustment (ajuste) horizontal del control. Se crea uno nuevo por defecto.
"headers-clickable"EscrituraSi es TRUE, entonces los encabezados de las columnas responden a los eventos de click. Por defecto es FALSE
"headers-visible"Lectura-EscrituraSi es TRUE, entonces muestra los botones de encabezado de columna. Por defecto es TRUE
"model"Lectura-EscrituraEl modelo del tree view. Por defecto es None
"reorderable"Lectura-EscrituraSi es TRUE, la vista es reorganizable. Por defecto es FALSE
"rules-hint"Lectura-EscrituraSi es TRUE, entonces indicar al motor de temas que dibuje las filas en colores alternados. Por defecto es FALSE
"search-column"Lectura-EscrituraIndica la columna del modelo en la que buscar cuando se hace a través de código. Por defecto es -1.
"vadjustment"Lectura-EscrituraEl Adjustment (ajuste) vertical para el control. Se crea uno nuevo por defecto.

Los métodos correspondientes son:

  enable_search = treeview.get_enable_search()
  treeview.set_enable_search(enable_search)

  column = treeview.get_expander_column()
  treeview.set_expander_column(column)

  hadjustment = treeview.get_hadjustment()
  treeview.set_hadjustment(adjustment)

  treeview.set_headers_clickable(active)

  headers_visible = treeview.get_headers_visible()
  treeview.set_headers_visible(headers_visible)

  reorderable = treeview.get_reorderable()
  treeview.set_reorderable(reorderable)

  riles_hint = treeview.get_rules_hint()
  treeview.set_rules_hint(setting)

  column = treeview.get_search_column()
  treeview.set_search_column(column)

  vadjustment = treeview.get_vadjustment()
  treeview.set_vadjustment(adjustment)

La función de la mayoría de ellos resulta obvia por su descripción. Sin embargo, la propiedad "enable-search" necesita que se haya definido correctamente la propiedad "search-column" como un número de una columna válida del modelo de árbol. Entonces, cuando el usuario o usuaria pulsa Control+f aparece un diálogo de búsqueda en el que se puede escribir. Se selecciona la primera fila coincidente a medida que se teclea..

Análogamente, la propiedad "headers-clickable" realmente solamente fija la propiedad "clickable" de las columnas TreeViewColumns subyacentes. Una TreeViewColumn no será ordenable salvo que su modelo de árbol implemente la interfaz TreeSortable y se haya llamado el método TreeViewColumn set_sort_column_id() con un número válido de columna.

La propiedad "reorderable" permite que usuarios y usuarias reordenen el modelo TreeView arrastrando y soltando las filas mostradas del TreeView.

La propiedad "rules-hint" no debe establecerse salvo en el caso de tener muchas columnas y cuando resulte útil mostrarlas con colores alternos.