2011-07-23 10 views
5

Se puede usar gtk.TreeViewColumn.set_resizable(True) para hacer que la columna se pueda cambiar de tamaño manualmente ... excepto la última columna, que siempre ocupa el espacio disponible.¿Cómo hacer la última gtk.TreeViewColumn redimensionable?

Si bien es sensato en la mayoría de los casos, uso TreeView-in-a-ScrolledView, y me gustaría poder reducir/expandir la última columna también.

Actualmente utilizo el siguiente kludge:

def add_dummy_column(treeview): 

    def put_dummy_last(treeview, dummy): 
     columns = treeview.get_columns() 
     last = next(reversed(columns), None) 
     if not last or last == dummy: 
      return 
     if dummy in columns: 
      treeview.move_column_after(dummy, last) 
     else: 
      treeview.append_column(dummy) 

    dummy = gtk.TreeViewColumn() 
    dummy.set_min_width(1) 
    dummy.set_fixed_width(1) 
    dummy.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) 
    dummy.set_resizable(False) 
    dummy.set_expand(False) 
    treeview.connect('columns-changed', put_dummy_last, dummy) 
    return dummy 

Sin embargo, esta columna ficticia tiende a ponerse siempre en el camino: complica bucles de la columna de la TreeView etc. ¿Hay una mejor/solución más elegante?

Actualización: en realidad funciona

Al tratar de forjar un ejemplo mínimo, he descubierto que funciona bien sin mi kludge. Aquí es mínima ejemplo y sin gtk.ScrolledWindow:

import gtk 

window = gtk.Window() 
window.connect('destroy', lambda *args: gtk.main_quit()) 

vbox = gtk.VBox() 
window.add(vbox) 

table = gtk.TreeView(gtk.ListStore(str, str, str)) 

for i in range(3): 
    column = gtk.TreeViewColumn('Column {}'.format(1 + i)) 
    column.set_resizable(True) 
    column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) 
    column.set_min_width(20) 
    column.set_fixed_width(80) 
    column.set_expand(False) 
    table.append_column(column) 

vbox.pack_start(table) 

vbox.pack_start(gtk.Statusbar(), False) 

window.set_default_size(300, 300) 
window.show_all() 
gtk.main() 

tratar de reducir la última columna - es imposible. Sin embargo, si cambia

vbox.pack_start(table) 

a

container = gtk.ScrolledWindow() 
vbox.pack_start(container) 
container.add(table) 

se puede ampliar y reducir el tamaño de la última columna sin problemas.

Respuesta

2

¡Sería más fácil ayudar si publicaras un ejemplo de trabajo autónomo con el que pudiéramos jugar! :)

Sin embargo, si entiendo su pregunta correctamente (que no estoy 100% seguro, para ser sincero), es posible que esté pensando en el problema en términos equivocados: lo que usted llama "cambiar el tamaño del La última columna "en realidad" está cambiando el tamaño del contenedor de vista de árbol ".

Si ese es el caso, simplemente debe agregar un contenedor redimensionable entre la ventana desplazada y la vista de árbol.

HTH!

+0

Tu sabio consejo para crear un ejemplo mínimo ayudó - ver arriba ;-) –

+0

¡Impresionante! Sin embargo, debe mover su "respuesta" a una respuesta a su pregunta, y luego seleccione su respuesta como "aceptada". De esta forma, SO mostrará su pregunta como "resuelta", lo cual es útil para futuros visitantes. Este es también el primer paso para obtener el "distintivo de autoaprendizaje". :) – mac

+0

He estado trabajando con GTk3, con TreeView dentro de ScrolledWindow. Aún no puedo expandir las columnas tanto como quiero (o en absoluto, ya que mis columnas siempre desbordan el contenedor). ¿Podría responder ampliarse con un ejemplo de trabajo que permite al usuario expandir y reducir columnas al tamaño deseado y mostrará todas las celdas contenidas por defualt – ThorSummoner

Cuestiones relacionadas