PyGtk CellRendererCombo使用Pixbuf

时间:2012-07-22 16:49:15

标签: python gtk pygtk canonical-quickly

我想在TreeView中显示一个包含一些图标的ComboBox。所以我创建了一个ListStore来保存数据。

    # 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图标而不是整数?如何使用整数初始化ComboBox?第二个问题是,当组合框未激活时,是否可以仅显示图标,并在值更改时显示图标和一些文本(ComboBox处于活动状态)?

1 个答案:

答案 0 :(得分:1)

您需要Gtk.CellRendererPixbuf才能显示图标。例如,请参阅优秀的Python 3 Gtk+ Tutorial

回答你的第二个问题:是的。只需连接到"changed"的{​​{1}}信号,然后动态添加/删除单元格渲染器。