Gtk.TreeView中始终显示可见和粘性列

问题描述 投票:1回答:2

我有这个qazxsw poi有3列嵌入qazxsw poi。

Gtk.TreeView

当我调整窗口大小(或在第一列中填充更多具有更长文本的行)时,最后两列不应该消失。

我希望最后两列始终可见并且粘贴到右侧而不会丢失左列。

单击按钮以添加非常长的字符串后,第一列不应增长。这种(快速和肮脏的操纵截图):

应该怎么样

Gtk.Paned

但它看起来如何(但不应该)

enter image description here

我没有在文档中看到实现这一点的方法。在下面的示例代码中,enter image description here被嵌入到enter image description here中以允许垂直滚动条。

Gtk.TreeView
python python-3.x treeview gtk pygobject
2个回答
2
投票

至少需要进行两项更改:

  1. 要使用长字符串保持列的正常大小,请设置Gtk.ScrolledWindow#!/usr/bin/env python3 import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk from gi.repository import GLib class TreeView(Gtk.TreeView): def __init__(self): # model self.model = Gtk.ListStore.new([str, int, int]) for i in range(1, 6): self.model.append([('text {} '.format(i))*i, i*10, i]) # view Gtk.TreeView.__init__(self, self.model) col_a = Gtk.TreeViewColumn('str', Gtk.CellRendererText(single_paragraph_mode=True), text=0) col_b = Gtk.TreeViewColumn('int', Gtk.CellRendererText(), text=1) col_c = Gtk.TreeViewColumn('int', Gtk.CellRendererText(), text=2) self.append_column(col_a) self.append_column(col_b) self.append_column(col_c) # scrollable self.scroll = Gtk.ScrolledWindow() self.scroll.add(self) self.scroll.set_policy(hscrollbar_policy=Gtk.PolicyType.NEVER, vscrollbar_policy=Gtk.PolicyType.AUTOMATIC) def on_button(self, event): self.model.append(['long text '*20, 0, 0]) class Window(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title='Mein Gtk-Fenster') #self.set_default_size(100, 120) # tree & button self.view = TreeView() self.btn = Gtk.Button('add long row') self.btn.connect('clicked', self.view.on_button) # layout #box = Gtk.VBox() #box.pack_start(self.btn, False, False, 10) #box.pack_start(self.view.scroll, True, True, 10) #self.add(box) self.paned = Gtk.Paned.new(orientation=Gtk.Orientation.HORIZONTAL) self.paned.pack1(self.view.scroll) self.paned.pack2(self.btn) self.add(self.paned) self.connect('destroy', Gtk.main_quit) self.show_all() if __name__ == '__main__': win = Window() Gtk.main() 属性。它应该是一个ellipsize
  2. 要使两个右列保持最后,通过将GtkCellRendererText属性设置为PangoEllipsizeMode来展开第一列以占用所有剩余空间。

您使用这些更改创建列:

expand

不要以为你需要True,以前从未使用过。


1
投票

除了@RandomUser提供的答案,您还可以使用固定大小的列。例:

col_a = Gtk.TreeViewColumn('str',
                           Gtk.CellRendererText(single_paragraph_mode=True,
                                                ellipsize=Pango.EllipsizeMode.END),
                           text=0)
col_a.set_expand(True)

添加set_expand将提供不同的操作:

single-paragraph-mode
© www.soinside.com 2019 - 2024. All rights reserved.