可以使用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)

您可以毫无问题地扩展和缩小最后一列。

最佳答案

如果您发布一个我们可以使用的独立的工作示例,则将更容易获得帮助! :)

但是-如果我正确理解了您的问题(说实话,我不确定100%的肯定)-可能是您以错误的术语来思考问题:您所谓的“调整最后一列的大小”实际上是“调整树状 View 容器的大小”。

如果是这种情况,您只需在滚动窗口和树 View 之间添加一个可调整大小的容器。

HTH!

关于python - 如何使最后一个gtk.TreeViewColumn可调整大小?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6799303/

10-13 09:05