簡體   English   中英

如何在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背后的想法是保持基礎數據( 模型 )和用戶界面( 視圖 )之間的清晰分隔。 樹存儲僅包含數據,渲染器是知道如何顯示模型數據的獨立對象。 通常,使用GtkTreeViewColumnadd_attribute方法將渲染器的屬性連接到數據模型的列。 例如,要將模型的第一列渲染為文本,可以實例化文本渲染器並調用textcolumn.add_attribute(textrenderer, "text", 0)

您的代碼無法正常工作,因為沒有可顯示任意窗口小部件的單元格渲染器。 模型既不是設計來承載GUI對象的,樹形視圖也不是小部件容器。 樹形視圖設計為能夠縮放到成千上萬的行,這不能使用每個單元格的單獨小部件來完成。

在您的情況下,您已經知道如何繪制數據,因此創建自定義渲染器並使用它來繪制列應該很簡單,而不是嘗試將繪制區域嵌入到樹形視圖中。 從Gtk.CellRenderer繼承,並通過實現on_render方法和on_get_size ,在其render虛擬方法中進行on_get_size

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM