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.
Tu sabio consejo para crear un ejemplo mínimo ayudó - ver arriba ;-) –
¡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
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