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

时间:2019-02-28 07:27:23

标签: python gtk gtk3 pygobject

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

  • 已付费(水平)
    • 已填充(垂直)
      • TreeView
      • TreeView
    • TreeView

换句话说,左侧有两个TreeView,右侧有一个TreeView,可以调整它们的大小。此外,所有TreeView都在ScrolledWindows内部,并且水平滚动条策略设置为“从不”。

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

resize behavior

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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()