如何在 Gtk.Treeview() 中渲染 Gtk.DrawingArea()?

How to render Gtk.DrawingArea() in a Gtk.Treeview()?

我在将 Gtk.DrawingArea() 渲染为 Gtk.TreeView() 时遇到了一些问题。这可能吗?

到目前为止我有这个代码:

window = Gtk.Window()
window.connect("destroy", lambda q: Gtk.main_quit())

darea=Gtk.DrawingArea()
darea.modify_bg(Gtk.StateFlags.NORMAL, Gdk.Color(1,1,1))

liststore = Gtk.ListStore(Gtk.DrawingArea)
liststore.append([darea])
liststore.append([darea])
treeview = Gtk.TreeView(model=liststore)
window.add(treeview)

treeviewcolumn = Gtk.TreeViewColumn("Drawing Areas")
treeview.append_column(treeviewcolumn)

cellrenderer = Gtk.CellRendererPixbuf() #Gtk.Drawable() #Gtk.CellRendererText()
treeviewcolumn.pack_start(cellrenderer, True)
treeviewcolumn.add_attribute(cellrenderer, "d areas", 0)

window.show_all()

Gtk.main()

但是当然它不起作用,因为我试图用 Gtk.CellRendererPixbuf() 渲染它。有没有什么Gtk.CellRendererDrawingArea()?

GtkTreeView背后的想法是保持底层数据(模型)和用户界面(视图[=25)之间的清晰分离=]).树存储仅包含数据,渲染器是知道如何显示模型数据的独立对象。通常,渲染器的 属性 使用 GtkTreeViewColumnadd_attribute 方法连接到数据模型的列。例如,要将模型的第一列呈现为文本,可以实例化一个文本呈现器并调用 textcolumn.add_attribute(textrenderer, "text", 0).

您的代码无法运行,因为没有显示任意小部件的单元格渲染器。该模型既不是设计用于托管 GUI 对象的,树视图也不是小部件容器。树视图旨在能够扩展到数万行,这无法通过为每个单元格使用单独的小部件来实现。

在您的情况下,由于您已经知道如何绘制数据,因此创建自定义渲染器并使用它绘制列而不是尝试将绘图区域嵌入到树视图中应该很简单。通过实现 on_render 方法以及 on_get_size.

继承 Gtk.CellRenderer 并在其 render 虚拟方法中进行绘制