我在两个嵌套的Paned小部件中有三个TreeView小部件:
换句话说,左侧有两个TreeView,右侧有一个TreeView,可以调整它们的大小。此外,所有TreeView都在ScrolledWindows内部,并且水平滚动条策略设置为“从不”。
左边的两个TreeView都只有一列文字。当我在顶级平移组件中移动滑块以使左侧的两个TreeView变小时,如果宽度太小而无法容纳列中的文本,我希望它们在右侧被剪切。而是看起来好像整个TreeView(两者)都向左滑动,位于窗口边界之外。这是非常违反直觉的,更重要的是,隐藏扩展器是最先隐藏的东西。
如上图所示,当我将垂直滑块向左拖动时,左侧两个TreeViews中的列都在窗口的“外侧”滑动。图片的左边界也是窗口的左边界。
此行为显然取决于列内值的最大大小,也就是说,仅在最长值不再适合视口后才开始“滑动”,因此看起来好像TreeView或列内它具有一些其他组件无法收缩的最小尺寸。但是,为了以防万一,我将所有可能相关的最小尺寸设置为0(尽管它也不适用于默认的最小尺寸)。
我希望重新调整TreeView及其列的大小,而不是这种行为,如果有必要,请在右侧隐藏部分值。但是似乎我无法在Gtk文档或Glade UI中找到任何对我有帮助的东西。
我正在使用Python和pygobject / Gtk3,并且还使用Glade交互地构建UI。
答案 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()