Можно использовать gtk.TreeViewColumn.set_resizable(True)
, чтобы изменить размер столбца вручную ... кроме последнего столбца - он всегда занимает доступное пространство.
Хотя в большинстве случаев это разумно, я использую TreeView-in-a-ScrolledView, и мне бы хотелось иметь возможность сжимать / расширять последний столбец.
В настоящее время я используюследующий ключ:
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
Однако этот фиктивный столбец имеет тенденцию всегда мешать: усложняет циклы столбцов TreeView и т. д. Есть ли лучшее / более элегантное решение?
Обновить: на самом деле это работает
Пытаясь подделать минимальный пример, я обнаружил, что он отлично работает без моего клуджа.Вот минимальный пример без 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()
Попробуйте сжать последний столбец - это невозможно.Однако, если вы измените
vbox.pack_start(table)
на
container = gtk.ScrolledWindow()
vbox.pack_start(container)
container.add(table)
, вы можете без проблем расширить и уменьшить последний столбец.