I am displaying a database table in a grid using the following code:
cols = [
{ "column": 0, "dbcolumn": "id", "dbtype": int, "title": "ID", "renderer": "text", "alignment": 0.0 },
{ "column": 1, "dbcolumn": "pocket_name", "dbtype": str, "title": "POCKET", "renderer": "text", "alignment": 0.0 },
{ "column": 2, "dbcolumn": "sort_code", "dbtype": str, "title": "SORT", "renderer": "text", "alignment": 0.0 },
{ "column": 3, "dbcolumn": "account_code", "dbtype": str, "title": "ACCOUNT", "renderer": "text", "alignment": 0.0 },
{ "column": 4, "dbcolumn": "PRINTF('%.2f', balance)", "dbtype": str, "title": "BALANCE", "renderer": "text", "alignment": 1.0 },
{ "column": 5, "dbcolumn": "STRFTIME('%d/%m/%Y', expires)", "dbtype": str, "title": "EXPIRES", "renderer": "text", "alignment": 0.0 }
]
sql = "SELECT " + ", ".join(v["dbcolumn"] for v in cols) + " FROM pockets ORDER BY sort_order, pocket_name"
store = Gtk.ListStore(*[k["dbtype"] for k in cols])
c = db.conn.cursor()
rc = c.execute(sql)
for r in rc:
store.append(r)
data_list = Gtk.TreeView.new();
for c in cols:
renderer = Gtk.CellRendererText() # text only
renderer.set_alignment(c["alignment"], 1.0)
column = Gtk.TreeViewColumn(c["title"], renderer, text=c["column"])
column.set_sort_column_id(c["column"])
column.set_resizable(True)
column.set_alignment(c["alignment"]) # not working
data_list.append_column(column)
# Set the tree view model
data_list.set_model(store)
target.append(data_list)
The lines renderer.set_alignment(c["alignment"], 1.0) and column.set_alignment(c["alignment"]) both work individually, but when used together only the renderer part seems to work (i.e. column contents are correctly aligned, not the header.
What am I missing here?
TreeViewColumn is deprecated from GTK 4 so moving to ColumnView.