2012-07-22 42 views
2

我想在我的TreeView中显示包含一些图标的组合框。所以我创建了一个ListStore来保存数据。PyGtk CellRendererCombo使用Pixbuf

# Initialize a list store for the combobox. 
    priorityModel = Gtk.ListStore(GObject.TYPE_INT, GdkPixbuf.Pixbuf) 
    priorityModel.append([0, self.loadPixbuf('./data/media/flag_blue.png')]) 
    priorityModel.append([1, self.loadPixbuf('./data/media/flag_green.png')]) 
    priorityModel.append([2, self.loadPixbuf('./data/media/flag_yellow.png')]) 
    priorityModel.append([3, self.loadPixbuf('./data/media/flag_red.png')]) 

然后我创建了Gtk.CellRendererCombo对象,并将上面的Gtk.ListStore指定为模型。

# Setup the priority cell renderer, ... 
    self.priorityRenderer = Gtk.CellRendererCombo() 
    self.priorityRenderer.set_property('editable', True) 
    self.priorityRenderer.set_property("model", priorityModel) 
    self.priorityRenderer.connect("edited", self.on_priority_changed, self.listStore, 3) 

最后,我创建了一个新Gtk.TreeViewColumn和分配的CellRenderer并把它添加到TreeView。

# ... setup the priority column ... 
    self.colPriority = Gtk.TreeViewColumn("Priority", self.priorityRenderer, text=3) 

    # ... and add it to the treeview. 
    self.append_column(self.colPriority) 

所有的不错,但我怎么能显示pixbuf的图标,而不是整数,我如何初始化使用整数组合框?第二个问题是,当组合框未处于活动状态时,是否可以只显示图标,并在值更改时显示图标和某些文本(组合框活动)?

回答

1

您需要一个Gtk.CellRendererPixbuf来显示图标。例如见优秀的Python 3 Gtk+ Tutorial

回答你的第二个问题:是的。只需连接Gtk.CellRendererCombo"changed"信号并动态添加/删除单元格渲染器。