禁用TreeView列“最小大小”行为

2024-05-16 22:11:18 发布

您现在位置:Python中文网/ 问答频道 /正文

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

  • 窗格(水平)
    • 窗格(垂直)
      • 树视图
      • 树视图
    • 树视图

换句话说,左边有两个TreeViews,右边有一个,所有的树视图都可以调整大小。此外,所有树视图都在水平滚动条策略设置为“从不”的滚动窗口中。你知道吗

左侧的两个TreeViews只有一列包含文本。当我在顶层窗格组件中移动滑块以使左侧的两个TreeViews变小时,如果宽度太小而无法容纳列中的文本,我希望它们被剪裁到右侧。相反,看起来整个树视图(两个)都向左滑动,超出了窗口边界。这是非常违反直觉的,更重要的是,隐藏扩展器,这是第一个被隐藏的东西。你知道吗

resize behavior

如上图所示,当我向左拖动垂直滑块时,左侧两个TreeView中的列都会在窗口的“外部”滑动;图片的左边界也是窗口的左边界。你知道吗

这种行为显然取决于列中值的最大大小,也就是说,只有在最长值不再适合视口之后,它才会开始这种“滑动”,因此看起来树视图或其中的列具有一些其他组件无法收缩的最小大小。不过,为了以防万一,我已经将所有可能相关的最小大小都设置为0(尽管它不适用于默认的不存在的最小大小)。你知道吗

与此行为不同,我希望调整树视图及其列的大小,如果需要,在右侧隐藏部分值。但似乎我在Gtk文档和GladeUI中都找不到对我有帮助的东西。你知道吗

我使用Python和pygobject/Gtk3,还使用Glade以交互方式构建UI。你知道吗


Tags: 文本视图宽度部件水平组件策略边界
1条回答
网友
1楼 · 发布于 2024-05-16 22:11:18

很可能是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()

相关问题 更多 >