import time import sys if '-2' in sys.argv: import pygtk import gobject as GObject import gtk as Gtk else: from gi.repository import Gtk, GObject class Timer: def __init__(self): self.t = time.time() def mark(self, message): t = time.time() print("{}: {}".format(message, t - self.t)) self.t = t t = Timer() class Song(GObject.GObject): def __init__(self): super(Song, self).__init__() self.id = 0 self.track = 15 self.title = "title" self.artist = "Foo bar" self.year = 1995 self.album = "Plop plip" self.file = "foo.ogg" def __getitem__(self, key): return getattr(self, key) def get(self, key, default): return getattr(self, key, default) songs = [Song() for i in range(10000)] t.mark("Create") columns_format = ['%N', '%T', '%A', '%Y - %B - %N'] current_columns = [str] * len(columns_format) def parse(part, song, unused=None): if part == '%N': return str(song.track) elif part == '%T': return song.title elif part == '%A': return song.album else: return "%d - %s - %d" % (song.year, song.album, song.track) l = Gtk.ListStore(*(current_columns)) for song in songs: items = [parse(part, song, True) for part in columns_format] l.append(items) t.mark("Append")