如何自定义`Gtk.TreeViewColumn`中呈现的文本?

时间:2019-04-05 17:21:16

标签: python python-3.x gtk3 pygtk pygobject

我拥有Gtk.ListStore中存储的文件大小(以字节为单位),并希望它们由Gtk.CellRendererText以人类可读的格式呈现。阅读文档,似乎Gtk.TreeViewColumn.set_cell_data_func()是实现此目的的方法。设置它的工作没有错误,但是一旦要渲染一个单元格,在几次失败的声明之后,整个应用程序就会崩溃。

这是我正在使用的代码:

self._builder.get_object("ContentList.Size").set_cell_data_func(
    Gtk.CellRendererText(),
    self.render_formatted_size
)

这是打印到 stderr 的内容:

/usr/lib/python3.7/site-packages/gi/overrides/Gio.py:44: Warning: g_object_freeze_notify: assertion 'G_IS_OBJECT (object)' failed
  return Gio.Application.run(self, *args, **kwargs)
/usr/lib/python3.7/site-packages/gi/overrides/Gio.py:44: Warning: g_object_get: assertion 'G_IS_OBJECT (object)' failed
  return Gio.Application.run(self, *args, **kwargs)
/usr/lib/python3.7/site-packages/gi/overrides/Gio.py:44: Warning: g_object_set: assertion 'G_IS_OBJECT (object)' failed
  return Gio.Application.run(self, *args, **kwargs)
/usr/lib/python3.7/site-packages/gi/overrides/Gio.py:44: Warning: g_object_is_floating: assertion 'G_IS_OBJECT (object)' failed
  return Gio.Application.run(self, *args, **kwargs)
/usr/lib/python3.7/site-packages/gi/overrides/Gio.py:44: Warning: g_object_get_qdata: assertion 'G_IS_OBJECT (object)' failed
  return Gio.Application.run(self, *args, **kwargs)

self.render_formatted_size的内容在这里无关紧要。似乎它从未执行过。

PS:不能在模型中添加其他字符串列,因为我希望能够随时更改显示单位(SI,IEC)。

1 个答案:

答案 0 :(得分:1)

您传递的是新创建的CellRenderer,而不是现有的。应该这样做:

rend = Gtk.CellRendererText()
column = Gtk.TreeViewColumn("title", rend)
column.set_cell_data_func (rend, cell_fn, None);
tree.append_column(column)