How to make the latest gtk.TreeViewColumn mutable?

You can use gtk.TreeViewColumn.set_resizable(True)it to resize a column manually ... except for the last column - it always takes up available space.

Although in most cases this is reasonable, I use TreeView-in-a-ScrolledView and I would like to be able to shrink / expand the last column.

I am currently using the following 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

However, this dummy column tends to always interfere: it complicates the outlines of TreeView columns, etc. Is there a better / more elegant solution?

Update: it really works

When trying to create a minimal example, I found that it works fine without my kludge. Here is a minimal example without 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()

Try decreasing the last column - this is not possible. However, if you change

vbox.pack_start(table)

to

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

.

+5
1

, , !:)

, ( 100%, ) - , : , " ", " ".

, .

!

+2

All Articles