from gi.repository import Gtk from gi.repository import GdkPixbuf class MyWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="CellRendererPixbuf") self.set_default_size(200, 200) liststore = Gtk.ListStore(GdkPixbuf.Pixbuf, str) pixbuf = GdkPixbuf.Pixbuf.new_from_file("example.png") liststore.append([pixbuf, "Example"]) treeview = Gtk.TreeView(model=liststore) renderer_pixbuf = Gtk.CellRendererPixbuf() column_pixbuf = Gtk.TreeViewColumn("Pixbuf") column_pixbuf.pack_start(renderer_pixbuf, True) column_pixbuf.add_attribute(renderer_pixbuf, "pixbuf", 0) renderer_text = Gtk.CellRendererText() column_text = Gtk.TreeViewColumn("Text") column_text.pack_start(renderer_text, True) column_text.add_attribute(renderer_text, "text", 1) treeview.append_column(column_pixbuf) treeview.append_column(column_text) self.add(treeview) win = MyWindow() win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main()
from gi.repository import Gtk class MyWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="CellRendererPixbuf") self.set_default_size(200, 200) liststore = Gtk.ListStore(str, str, Gtk.Image) liststore.append(["Example 1", "example1.png", None]) liststore.append(["Example 2", "example2.png", None]) treeview = Gtk.TreeView(model=liststore) renderer_text = Gtk.CellRendererText() column_text = Gtk.TreeViewColumn("Text") column_text.pack_start(renderer_text, True) column_text.add_attribute(renderer_text, "text", 0) renderer_pixbuf = Gtk.CellRendererPixbuf() column_pixbuf = Gtk.TreeViewColumn("Pixbuf") column_pixbuf.pack_start(renderer_pixbuf, True) def on_cell_edited(widget, path, text): iter = liststore.get_iter_from_string(path) liststore.set_value(iter, 2, Gtk.Image.new_from_file(text)) def on_cell_renderer_edited(widget, path, new_text): liststore[path][1] = new_text liststore[path][2] = Gtk.Image.new_from_file(new_text) def on_row_activated(treeview, path, column): dialog = Gtk.FileChooserDialog("Open..", None, Gtk.FileChooserAction.OPEN, (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OPEN, Gtk.ResponseType.OK)) response = dialog.run() if response == Gtk.ResponseType.OK: path = dialog.get_filename() iter = liststore.get_iter(path) if iter is not None: liststore.set_value(iter, 2, Gtk.Image.new_from_file(path)) dialog.destroy() renderer_pixbuf.connect("edited", on_cell_renderer_edited) renderer_pixbuf.connect("activated", on_row_activated) column_pixbuf.add_attribute(renderer_pixbuf, "pixbuf", 2) column_editable = Gtk.TreeViewColumn("Editable") renderer_editable = Gtk.CellRendererText() renderer_editable.connect("edited", on_cell_edited) column_editable.pack_start(renderer_editable, True) column_editable.add_attribute(renderer_editable, "text", 1) treeview.append_column(column_text) treeview.append_column(column_pixbuf) treeview.append_column(column_editable) self.add(treeview) win = MyWindow() win.connect("destroy", Gtk.main_quit) win.show_all() Gtk.main()This example demonstrates a more advanced usage of the CellRendererPixbuf. We create a Gtk window containing a TreeView with three columns: one for displaying a text label in a CellRendererText, one for displaying an image in a CellRendererPixbuf, and another one for editing the image file path in a CellRendererText. The function on_cell_renderer_edited is triggered when the user edits the text label in the editable column, and updates the corresponding image in the pixbuf column.