如何使用CellRendererPixbuf在Gtk.Treeview中显示GIcon

时间:2015-03-24 10:22:48

标签: treeview gtk gtk3

我正在使用CellRendererPixbuf动态添加我的列,其代码如下:

    private void add_column (TrackColumns type) {
        var column = new Gtk.TreeViewColumn () ;
        column.title = type.get_title () ;
        var renderer = type.get_cell_renderer () ;
        column.pack_start (renderer, true);
        // 
        column.set_attributes (renderer, (type == TrackColumns.ICON) ? "pixbuf" : "text", type) ;

        treeview.insert_column (column, -1);
    }

方法TrackColumns.get_cell_renderer

    public Gtk.CellRenderer get_cell_renderer () {
        if( this == ICON )
        {
            var result = new Gtk.CellRendererPixbuf ();
            //icon_renderer.follow_state = true;
            return result ;
        }
        if( this == TITLE )
        {
            var result = new Gtk.CellRendererText ();
            result.height = TrackListView.COLUMN_HEIGHT;
            return result ;
        }

        var result = new Gtk.CellRendererText ();
        result.height = TrackListView.COLUMN_HEIGHT;
        result.xpad = TrackListView.SPACING;
        return result ;
    }

我希望CellRendererPixbuf显示GIcon

上面的代码没有显示任何内容,并给出了以下警告:

unable to set property 'pixbuf' of type 'GdkPixbuf' from value of type 'GIcon'

出了什么问题?

1 个答案:

答案 0 :(得分:0)

正确的代码是:

    column.set_attributes (renderer, (type == TrackColumns.ICON) ? "gicon" : "text", type) ;

set_attributes方法定义要设置的渲染器的属性名称以及渲染单元格时要使用的值。

在我的代码中,我只有两种类型的渲染器:CellRendererTextCellRendererPixbuf

因为我希望Gtk.Treeview使用我的列值设置CellRendererPixbuf.gicon,所以当我的列类型为{{1}时,我需要传递"gicon"(而不是"pixbuf") }。

其余时间,我使用TrackColumns.ICON,因此我需要使用CellRendererText.text,然后通过CellRendererText

所有这些(以及更多)都解释为there