2011-08-22 5 views
7

Tengo un problema con Gtk.Treeview indide a Gtk.ScrolledWindow. Tengo una gran cantidad de datos, que no se ajustan a mi ventana geométrica normal, así que puse mi Treeview dentro de un ScrolledWindow, que parece ser la forma normal. El problema con esta solución es que mi encabezado de columna desaparece cuando me desplazo. Este comportamiento me parece algo bueno, ya que el ScrolledWindow debería preocuparse por los widgets que contiene.¿Cómo mostrar los encabezados de columna en un GtkTreeView dentro de una ventana gtk.ScrolledWindow?

Entonces, ¿cómo puedo hacer que mi Treeview sea desplazable Y mostrar los encabezados de las columnas siempre en la primera fila?

he modificado el ejemplo basictreeview.py representar a mi problema:

#!/usr/bin/env python 

# example basictreeview.py 

import pygtk 
pygtk.require('2.0') 
import gtk 

class BasicTreeViewExample: 

    # close the window and quit 
    def delete_event(self, widget, event, data=None): 
     gtk.main_quit() 
     return False 

    def __init__(self): 
     # Create a new window 
     self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) 
     self.window.set_title("Basic TreeView Example") 
     self.window.set_size_request(200, 200) 
     self.window.connect("delete_event", self.delete_event) 

     # create a TreeStore with one string column to use as the model 
     self.liststore = gtk.ListStore(str) 

     # we'll add some data now - 4 rows with 3 child rows each 
     for i in range(10): 
      self.liststore.append([str(i)]) 

     # create the TreeView using treestore 
     self.treeview = gtk.TreeView(self.liststore) 

     # create the TreeViewColumn to display the data 
     self.tvcolumn = gtk.TreeViewColumn("Column-Name", gtk.CellRendererText(), text=0) 

     # add tvcolumn to treeview 
     self.treeview.append_column(self.tvcolumn) 

     # make it searchable 
     self.treeview.set_search_column(0) 

     # Allow sorting on the column 
     self.tvcolumn.set_sort_column_id(0) 

     # Allow drag and drop reordering of rows 
     self.treeview.set_reorderable(True) 

     # Add Treeview to a ScrolledWindow 
     self.scrolledwindow = gtk.ScrolledWindow(hadjustment=None, vadjustment=None) 
     self.scrolledwindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) 
     self.scrolledwindow.add_with_viewport(self.treeview) 

     self.window.add(self.scrolledwindow) 

     self.window.show_all() 

def main(): 
    gtk.main() 

if __name__ == "__main__": 
    tvexample = BasicTreeViewExample() 
    main() 
+0

¿Puedes encontrar una aplicación que haga esto? Si es así, tu mejor opción es buscar en el código fuente. Por lo que sé, no hay una manera fácil de hacer esto con GtkTreeView. – ptomato

Respuesta

11

Cambio self.scrolledwindow.add_with_viewport a self.scrolledwindow.add y funcionará. De the documentation:

Se utiliza el método add_with_viewport() para añadir un widget (especificado por niño) sin capacidad de desplazamiento nativas a la ventana de desplazamiento. Esta es una función de conveniencia que es equivalente a agregar un elemento secundario a un gtk.Viewport y luego agregar la ventana gráfica a la ventana desplazada. Si un niño tiene desplazamiento nativo (por ejemplo, gtk.TextView, gtk.TreeView, gtk.Layout), use gtk.Container.add() en lugar de este método.

gtk.TreeView 's 'desplazamiento nativo' mantiene los títulos de las columnas en la parte superior, pero si se pone todo el widget de vista de árbol en un gtk.Viewport primero, entonces todo el widget se desplazará.

+0

tan fácil como esperaba que fuera. ¡Gracias! – Fookatchu

Cuestiones relacionadas