禁用 TreeView 列 "minimum size" 行为

Disable TreeView column "minimum size" behavior

我在两个嵌套的 Paned 小部件中有三个 TreeView 小部件:

也就是说,左右两个TreeView,都可以调整大小。此外,所有 TreeView 都在 ScrolledWindows 内,水平滚动条策略设置为“从不”。

左边的两个 TreeView 只有一列有文本。当我移动顶级窗格组件中的滑块以使左侧的两个 TreeView 变小时,如果宽度太小而无法容纳列中的文本,我希望它们在右侧被剪裁。相反,它看起来好像整个 TreeView(它们都)向左滑动,在 window 边界之外。这是非常违反直觉的,更重要的是,隐藏了最先被隐藏的扩展器。

如上图所示,当我将垂直滑块向左拖动时,左侧两个 TreeView 中的列都滑到了 window 的“外部”;图片的左边界也是window.

的左边界

此行为显然取决于列内值的最大大小,也就是说,它仅在最长的值不再适合视口后才开始“滑动”,因此看起来就像 TreeView 或它里面的列有一些其他组件不能缩小的最小尺寸。但是,为了以防万一,我已将所有可能相关的最小尺寸设置为 0(尽管它也不适用于默认缺少的最小尺寸)。

我希望调整 TreeView 及其列的大小,并在必要时隐藏右侧的部分值,而不是这种行为。但似乎我在 Gtk 文档和 Glade UI 中找不到任何对我有帮助的东西。

我正在使用 Python 和 pygobject/Gtk3,我还使用 Glade 以交互方式构建 UI。

(很可能)CellRendererText 禁止列缩小。尝试将其 ellipsize 属性 设置为 Pango.EllipsizeMode.END,如本例所示:

from gi.repository import Gtk, GObject, GLib, Pango

list_store = Gtk.ListStore(str)

window = Gtk.Window.new(Gtk.WindowType.TOPLEVEL)
paned = Gtk.Paned.new(Gtk.Orientation.HORIZONTAL)

tree = Gtk.TreeView.new()
tree.set_model(list_store)
rend = Gtk.CellRendererText()
rend.set_property("ellipsize", Pango.EllipsizeMode.END)
column = Gtk.TreeViewColumn("title", rend, text=0)
column.set_resizable(True)
column.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE)
tree.append_column(column)

for i in range (11):
    list_store.append(['ddt ' * 50])

paned.add1(tree)
paned.add2(Gtk.Label.new("hello"))
window.add(paned)

window.connect("destroy", Gtk.main_quit)
window.show_all()
Gtk.main()