在Python中,使用gtk3.0,我有一个ListStore
包含一个int
列。我不想改变ListStore
,但我希望显示的单元格内容通过使用SI后缀从存储值中派生(即,显示1.3k而不是ListStore
中的1300)。你知道吗
以下MWE基于this example。但是,该示例计算第三列并将其添加到底层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
,但没用。我没有找到足够的文档,只有this one。你知道吗
我试图将我自己的CellRendererSize
从Gtk.CellRendererText
子类化,但是没有找到关于我需要实现什么以及如何使用它的文档。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐