可以使用gtk.TreeViewColumn.set_resizable(True)
使列可手动调整大小...除了最后一列 - 它总是占用可用空间。
虽然在大多数情况下它是明智的,但我使用TreeView-in-a-ScrolledView,我希望能够缩小/扩展最后一列。
目前我使用以下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
然而,这个虚拟列往往会妨碍:使TreeView列循环复杂化等等。是否有更好/更优雅的解决方案?
更新:它确实有效
在尝试打造一个最小的例子时,我发现它没有我的kludge工作正常。这是没有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)
您可以毫无问题地扩展和缩小最后一列。
答案 0 :(得分:2)
如果你发布一个我们可以玩的独立工作示例,那将更容易提供帮助! :)
然而 - 如果我正确理解你的问题(说实话,我不是百分之百确定) - 可能是你用错误的术语来思考问题:你所谓的“调整最后一栏的大小”实际上是“调整树视图容器的大小”。
如果是这种情况,您只需在滚动窗口和树视图之间添加一个可调整大小的容器。
HTH!