我想在树视图中显示一个包含一些图标的组合框。所以我创建了一个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图标而不是整数,以及如何使用整数初始化组合框?第二个问题是,当组合框不活动时,是否可以只显示图标,而当值更改时(组合框活动),是否可以显示图标和一些文本?
您需要一个Gtk.CellRendererPixbuf
来显示图标。例如,请参阅优秀的Python 3 Gtk+教程。
回答你的第二个问题:是的。只需连接到Gtk.CellRendererCombo
的"changed"
信号,即可动态添加/删除单元渲染器。