Прокрутка содержимого TreeView в PyGObject без прокрутки заголовков - PullRequest
0 голосов
/ 08 мая 2018

Я хочу прокрутить содержимое из Gtk.TreeView. Это означает строки, но не заголовок. Так что использование Gtk.ScrolledWindow здесь не поможет, потому что это приведет к прокрутке всего виджета.

Я нашел Gtk.Adjustment, но не знаю, как его использовать.

Это то, что я пробовал до сих пор

#!/usr/bin/env python3
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

class TreeView(Gtk.TreeView):
    def __init__(self):
        # model
        self.model = Gtk.ListStore.new([int])
        for i in range(30):
            self.model.append([i])

        # view
        Gtk.TreeView.__init__(self, self.model)

        col_a = Gtk.TreeViewColumn('int',
                                   Gtk.CellRendererText(),
                                   text=0)
        self.append_column(col_a)

        # "adjustment" ???
        self.adj = Gtk.Adjustment()
        self.set_vadjustment(self.adj)


class Window(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title='Mein Gtk-Fenster')
        self.set_default_size(100, 120)

        self.view = TreeView()

        # layout
        self.layout = Gtk.Grid()
        self.add(self.layout)
        self.layout.attach(self.view, 0, 1, 1, 1)

        self.connect('destroy', Gtk.main_quit)
        self.show_all()

if __name__ == '__main__':
    win = Window()
    Gtk.main()

1 Ответ

0 голосов
/ 08 мая 2018

Вы должны просто упаковать свой TreeView в Gtk.ScrolledWindow

class Window(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title='Mein Gtk-Fenster')
        self.set_default_size(100, 120)

        self.view = TreeView()

        scroll = Gtk.ScrolledWindow () # 1
        scroll.add (self.view)         # 2
        scroll.set_policy (Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)

        self.add (scroll)

        self.connect('destroy', Gtk.main_quit)
        self.show_all()

TreeView достаточно умен, чтобы прокручивать только содержимое:

scrolled treeview example

...