Заставить Gtk.TreeView отображать рассчитанное содержимое ячейки - PullRequest
0 голосов
/ 06 мая 2018

В Python, используя Gtk 3.0, у меня есть ListStore, содержащий int столбец. Я не хочу изменить ListStore, но я хочу, чтобы отображаемое содержимое ячейки было выведено из сохраненного значения с использованием суффиксов SI (т. Е. Отображать 1.3k вместо 1300 от ListStore).

Следующий MWE основан на этом примере . В этом примере, однако, вычисляется третий столбец и добавляется его в базовый ListStore. Тогда исходные данные просто не отображаются в представлении. Я не хочу этого делать (я думаю, что это плохо масштабируется с добавлением различных представлений или функций форматирования).

#!/usr/bin/python

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

import os, math



def siSize(x): # simplified version
    if x > 1000:
        return '{:.1f}k'.format(x / 1000)
    else:
        return str(x)


class MyWindow(Gtk.Window):

    def __init__(self):

        Gtk.Window.__init__(self)

        self.connect('delete-event', Gtk.main_quit)


        store = Gtk.ListStore(str, int)
        #store = Gtk.ListStore(str, str)

        for name in os.listdir('.'):
            size = os.path.getsize(name)
            store.append([name, size])
            #store.append([name, siSize(size)])       

        col1 = Gtk.TreeViewColumn('Name', Gtk.CellRendererText(), text=0)
        col1.set_sort_column_id(0)        

        col2 = Gtk.TreeViewColumn('Size', Gtk.CellRendererText(), text=1)
        col2.set_sort_column_id(2)

        treeview = Gtk.TreeView(model=store)
        treeview.append_column(col1)
        treeview.append_column(col2)        

        scroll = Gtk.ScrolledWindow()
        scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
        scroll.set_min_content_height(200)
        scroll.add(treeview)

        self.add(scroll)


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

Я пытался использовать set_cell_data_func, но безрезультатно. Я не нашел достаточной документации по этому вопросу, только этот .

Я пытался создать подкласс для своего собственного CellRendererSize из Gtk.CellRendererText, но не смог найти документацию о том, что мне нужно реализовать, и как это будет использоваться.

...