如何让ttkbootstrap TableView列标题始终保持右对齐?
问题
我用ttkbootstrap的TableView创建了带多列的表格,其中一列标题设置为右对齐。但调用build_table_data方法加载数据后,该列标题的右对齐样式丢失了。之前用Treeview刷新数据时,列标题配置会保留,但TableView却不行。我确认传入build_table_data的列配置和创建TableView时完全一致,但问题依旧。
以下代码可复现该问题:运行后“Right Just”列标题是右对齐的,点击Test按钮加载数据后,标题就不再右对齐了。请问这是bug还是预期行为?有什么解决办法?
import ttkbootstrap as ttk from ttkbootstrap.tableview import Tableview def loaddata(): eobTable_data = [('Rec 1', '', 'a', 'Col4 data', '')] eobTable.build_table_data(coldata=eobColms,rowdata=eobTable_data) # create the toplevel window root = ttk.Window() frame = ttk.Frame(root, padding=10) frame.pack(fill='both', expand='yes') global eobColms eobColms = [{'text': 'Col 1', 'anchor': 'w', 'stretch': False}, {'text': 'Col 2', 'stretch': True}, {'text': 'Col 3', 'anchor': 'w','stretch': False}, {'text': 'Right Just','anchor': 'e', 'stretch': False}, {'text': 'Col 5', 'stretch': True}] eobTable_data = ("",) eobTable = Tableview(root,coldata=eobColms,rowdata=eobTable_data, paginated=True,pagesize=14,searchable=True,bootstyle='danger',height=14) eobTable.pack(fill='both', expand=True) test_btn = ttk.Button(root,text="Test",command=loaddata).pack() root.mainloop()
分析与解决办法
这是ttkbootstrap TableView组件的bug,build_table_data方法在重建表格时,仅处理了单元格内容的对齐配置,却忽略了将列配置中的anchor参数应用到标题上,导致标题对齐样式丢失。
有两种可行的解决办法:
方法一:手动重置列标题对齐
在调用build_table_data后,遍历列配置手动为每个标题设置对齐方式:
def loaddata(): eobTable_data = [('Rec 1', '', 'a', 'Col4 data', '')] eobTable.build_table_data(coldata=eobColms,rowdata=eobTable_data) # 手动重新设置列标题对齐 for col_idx, col_cfg in enumerate(eobColms): if 'anchor' in col_cfg: eobTable.heading(col_idx, anchor=col_cfg['anchor'])
方法二:修改TableView源码(永久补丁)
找到ttkbootstrap安装目录下的tableview.py文件,定位到build_table_data方法中创建列标题的代码段,将原代码:
self.heading(col, text=col_data.get("text", ""))
修改为:
self.heading(col, text=col_data.get("text", ""), anchor=col_data.get("anchor", "w"))
修改后,后续调用build_table_data时,标题会自动应用配置中的anchor参数,无需手动设置。
内容的提问来源于stack exchange,提问作者dbjock
相关产品推荐
相关产品推荐

