Skip to main content
 首页 » 编程设计

python之PyGtk CellRendererCombo 使用 Pixbuf

2025年05月04日6findumars

我想在我的 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?而且,第二个问题,是否可以在组合框未激活时仅显示图标,并在值更改时显示图标和一些文本(组合框处于事件状态)?

请您参考如下方法:

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

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