[英]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
背后的想法是保持基礎數據( 模型 )和用戶界面( 視圖 )之間的清晰分隔。 樹存儲僅包含數據,渲染器是知道如何顯示模型數據的獨立對象。 通常,使用GtkTreeViewColumn
的add_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.