2012-07-22 26 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"信號並動態添加/刪除單元格渲染器。