Можно было бы использовать GTK3 вместо tkinter, действительный пример ниже. OP просит решение с помощью tkinter, но OP - это я и не нашел пути к нему, поэтому ...
from gi.repository import Gtk, Gdk, GdkPixbuf
class MyWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self)
self.set_default_size(200, 200)
self.liststore = Gtk.ListStore(str, str, str)
self.treeview = Gtk.TreeView(model=self.liststore)
self.liststore.append(["dot_red16x16.png", "This is a symbol1","dot_green16x16.png"])
px_renderer = Gtk.CellRendererPixbuf()
px_column = Gtk.TreeViewColumn('')
px_column.pack_start(px_renderer, False)
str_renderer = Gtk.CellRendererText()
px_column.pack_start(str_renderer, False)
px_renderer2 = Gtk.CellRendererPixbuf()
px_column.pack_start(px_renderer2, False)
# set data connector function/method
px_column.set_cell_data_func(px_renderer, self.get_tree_cell_pixbuf,0)
px_column.set_cell_data_func(px_renderer2, self.get_tree_cell_pixbuf,2)
px_column.set_cell_data_func(str_renderer, self.get_tree_cell_text)
self.treeview.append_column(px_column)
self.add(self.treeview)
def get_tree_cell_text(self, col, cell, model, iter, user_data):
cell.set_property('text', model.get_value(iter, 1))
def get_tree_cell_pixbuf(self, col, cell, model, iter, user_data):
cell.set_property('pixbuf', GdkPixbuf.Pixbuf.new_from_file(model.get_value(iter, user_data)))
if __name__ == '__main__':
win = MyWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()
строка 11, замените dot_red16x16.png
и dot_green16x16.png
имена своим собственным значком файлы и сохраните это, отрежьте в сторону файлы значков.
gtk readthedocs: https://python-gtk-3-tutorial.readthedocs.io
примечание: на самом деле тяжелее (на windows) это настроить GTK3 для работы. Вот два способа, которые я протестировал: