I am having difficulty loading a file or displaying a colour in one of the columns of a Gtk TreeView (Python binding of GTK3). An example taken from QGIS shows a icon in the
Here is a complete example of how to create a tree store with icons (credit goes to Ryan Paul):
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk as gtk
from gi.repository import Gdk as gdk
from gi.repository import GdkPixbuf
import os, stat
# Instantiate the tree store and specify the data types
store = gtk.TreeStore(str, GdkPixbuf.Pixbuf, int, bool)
def dirwalk(path, parent=None):
# Iterate over the contents of the specified path
for f in os.listdir(path):
# Get the absolute path of the item
fullname = os.path.join(path, f)
# Extract metadata from the item
fdata = os.stat(fullname)
# Determine if the item is a folder
is_folder = stat.S_ISDIR(fdata.st_mode)
# Generate an icon from the default icon theme
img = gtk.IconTheme.get_default().load_icon(
"folder" if is_folder else "document",
gtk.IconSize.MENU, 0)
# Append the item to the TreeStore
li = store.append(parent, [f, img, fdata.st_size, is_folder])
# If the item is a folder, descend into it
if is_folder: dirwalk(fullname, li)
dirwalk("/path/to/folder")
# Create a TreeViewColumn
col = gtk.TreeViewColumn("File")
# Create a column cell to display text
col_cell_text = gtk.CellRendererText()
# Create a column cell to display an image
col_cell_img = gtk.CellRendererPixbuf()
# Add the cells to the column
col.pack_start(col_cell_img, False)
col.pack_start(col_cell_text, True)
# Bind the text cell to column 0 of the tree's model
col.add_attribute(col_cell_text, "text", 0)
# Bind the image cell to column 1 of the tree's model
col.add_attribute(col_cell_img, "pixbuf", 1)
# Create the TreeView and set our data store as the model
tree = gtk.TreeView(store)
# Append the columns to the TreeView
tree.append_column(col)
scroll = gtk.ScrolledWindow()
scroll.add(tree)
window = gtk.Window()
window.connect("destroy", gtk.main_quit)
window.add(scroll)
window.set_default_size(400,400)
window.show_all()
gtk.main()