Gtk.TreeViewColumn无法同时右对齐表头与列表内容的问题
Gtk TreeView表头对齐失效问题
我用以下代码在网格中展示数据库表:
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)
单独调用renderer.set_alignment(c["alignment"], 1.0)与column.set_alignment(c["alignment"])时均能正常生效,但同时使用这两行代码时,仅列表内容的对齐效果正常,表头未按设置对齐。请问我遗漏了什么配置?
解决方案
问题出在column.set_alignment()的作用范围:它控制的是列表单元格内容区域的整体对齐,而非表头标题的对齐。要让表头按配置对齐,你需要调用column.set_title_alignment()方法单独设置表头的对齐方式。
修改后的循环代码片段:
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_title_alignment(c["alignment"]) # 若需控制列内容区域的整体位置对齐,可保留此配置(可选) # column.set_alignment(c["alignment"]) data_list.append_column(column)
关键区别说明
renderer.set_alignment():控制单元格内文本的对齐方式column.set_title_alignment():控制表头标题文本的对齐方式column.set_alignment():控制整个列在TreeView中的位置对齐(比如列整体靠左/右,与单元格内容对齐是不同概念)
调整后,内容和表头就能同时按配置的对齐方式显示。
内容的提问来源于stack exchange,提问作者garybarnes59
相关产品推荐
相关产品推荐

