【发布时间】:2016-01-09 04:37:47
【问题描述】:
我在将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()之类的吗?
【问题讨论】:
-
绘图区从何而来?如果您自己绘制,为什么不实现自定义单元格渲染器?
-
@user4815162342 是的,这幅画是我画的。我想制作自己的 cellrender,但我刚刚找到了 C 文档,我想我会很幸运的
-
GtkTreeView背后的理念是保持数据和 UI 的清晰分离;存储(模型)包含渲染器知道如何渲染的数据。该模型不是为包含小部件而设计的,树视图也不是可以嵌入它们的容器,因此没有渲染器可以显示任意小部件。由于您已经知道如何绘制数据,因此您需要创建自定义渲染器而不是绘图区域。从 Gtk.CellRenderer 继承并通过实现on_render方法和on_get_size在其渲染虚拟方法中进行绘图。 -
@user4815162342 感谢这些大行!连同这个this examples,我可能能够做到这一点:)
-
好的,我现在发布了评论的扩展版本作为答案,以供将来参考。