【问题标题】:Disable TreeView column "minimum size" behavior禁用 TreeView 列“最小尺寸”行为
【发布时间】:2019-02-28 18:36:27
【问题描述】:

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

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

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

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

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

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

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

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

【问题讨论】:

    标签: python gtk gtk3 pygobject


    【解决方案1】:

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

    【讨论】:

    • 是的,它有帮助!谢谢!
    猜你喜欢
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    • 2016-10-27
    • 2010-12-26
    相关资源
    最近更新 更多