==============


Python扩展库ttkbootstrap中的Tableview组件用于以表格形式显示数据,支持奇偶行颜色不同、自动分页、自动缩放和对齐的列、鼠标拖拽调整列宽,支持单击表头进行升序排列或降序排列,支持表头与单元格右键菜单实现排序、筛选、移动、删除、导出等操作。该组件基于tkinter.ttk.Treeview,可以通过其view属性访问Treeview组件及其属性。Tableview类创建对象时语法如下,
Tableview(master=None, bootstyle='default',
coldata=None, rowdata=None,
paginated=False, searchable=False,
yscrollbar=False, autofit=False,
autoalign=True, stripecolor=None,
pagesize=10, height=10, delimiter=',',
disable_right_click=False,
on_select=None, iid_field=None)
其中,参数coldata用来指定表头名称及其属性(可用属性包括text、image、command、anchor、width、minwidth、maxwidth、stretch,见本节后面关于TableColumn类的介绍),rowdata用来指定表格中的行数据,paginated用来指定是否进行分页显示,pagesize用来指定每页显示多少行数据,searchable用来指定是否启用搜索功能(启用时会自动在表格上方显示搜索框,输入内容后按回车键进行搜索,以空字符串进行搜索表示重置搜索条件、显示所有数据),yscrollbar用来指定是否显示垂直滚动条(水平滚动条总是显示),autofit用来指定加载数据时是否自动对列的大小进行缩放(值为True时列属性width不起作用),autoalign用来指定是否自动对齐(数字列及表头右对齐,其他类型的数据列及表头左对齐),stripecolor用来指定偶数行的背景颜色和前景颜色(二者可以使用任意形式的颜色值或None),height用来指定表格中多少行数据可见,delimiter用来指定把数据导出为CSV文件时的分隔符,disable_right_click用来指定是否禁用右键菜单,on_select用来指定行的选择发生变化时调用的回调函数(回调函数的参数为当前所有处于选择状态的行),iid_field用来指定使用哪一列的数据作为每行数据的唯一标识符。
Tableview对象的只读属性有cidmap、iidmap、is_filtered、tablecolumns、tablecolumns_visible、tablerows、tablerows_filtered、tablerows_visible,可读可写属性有pagesize、searchcriteria。
除了从基类tkinter.ttk.Frame、tkinter.ttk.Widget、tkinter.Widget、tkinter.BaseWidget、tkinter.Misc、tkinter.Pack、tkinter.Place、tkinter.Grid中继承的方法,Tableview组件的自定义方法如下表所示。在下表大部分方法都带有参数event,这样的方法既可以通过触发事件自行调用,也可以在代码中显式调用,前者会自动传递表示事件详情的参数并自动识别当前位置做出准确的处理。另外,Tableview组件本身已经绑定大量事件并封装了相应方法的调用,通过鼠标左击和右键菜单可以实现很多操作。下面代码演示了这两种用法,其中的root表示应用程序主窗口Window对象,dt表示Tableview对象。
# 第一种用法,通过触发事件自动调用,处理鼠标位置所在列
dt.view.bind('<Button-1>', dt.align_column_center)
# 第二种用法,显式调用,通过参数cid指定要处理那一列
def func():
dt.align_column_center(cid=2)
ttk.Button(root, text='第3列居中', command=func).pack()
方法 | 功能 |
align_column_center(event=None, cid=None) | 指定列(event事件所在的列或cid指定的列)的文本居中,参数cid为指定列在原始数据集中的整数索引 |
align_column_left(event=None, cid=None) | 指定列的文本左对齐 |
align_column_right(event=None, cid=None) | 指定列的文本右对齐 |
align_heading_center(event=None, cid=None) | 指定列的表头文本居中 |
align_heading_left(event=None, cid=None) | 指定列的表头文本左对齐 |
align_heading_right(event=None, cid=None) | 指定列的表头文本右对齐 |
apply_table_stripes(stripecolor) | 为偶数行增加条纹颜色,参数形式为元组(backgroud, foreground) |
autoalign_columns() | 自动对列和标题进行对齐,数值型数据右对齐,文本左对齐 |
autofit_columns() | 在当前视图中自动适应所有列的大小 |
build_table_data(coldata, rowdata) | 删除表格原有结构和数据,使用新的表头和数据重建表格 |
configure(cnf=None, **kwargs) | 查询或修改内部Treeview组件的属性 |
delete_column(index=None,cid=None, visible=True) | 删除索引index或唯一标识符cid对应的列,visible用来指定index对应的是否为可见列 |
delete_columns(indices=None, cids=None, visible=True) | 删除指定的多个列 |
delete_row(index=None, iid=None, visible=True) | 删除索引index或唯一标识符iid指定的行,visible用来指定index对应的是否为可见行 |
delete_rows(indices=None, iids=None, visible=True) | 删除指定的多个行,参数indices和iids同时为None时删除所有行 |
export_all_records() | 导出所有记录到CSV文件 |
export_current_page() | 导出当前页中的记录到CSV文件 |
export_current_selection() | 导出当前选择的行到CSV文件 |
export_records_in_filter() | 导出当前过滤的行到CSV文件 |
fill_empty_columns(fillvalue='') | 使用指定值填充空白列 |
filter_column_to_value(event=None, cid=None, value=None) | 只显示cid列的值与value精确匹配的行,隐藏其他行 |
filter_to_selected_rows() | 只显示选择行,隐藏其他行 |
get_column(index=None, visible=False, cid=None) | 返回指定的列,类型为TableColumn |
get_columns() | 返回包含所有列的列表 |
get_row(index=None, visible=False, filtered=False, iid=None) | 返回指定的行,类型为TableRow。同时指定visible和filtered时,前者优先级更高 |
get_rows(visible=False, filtered=False, selected=False) | 返回包含若干TableRow对象的列表,每次只有一个参数起作用,如果多个参数同时设置为True则只有第一个有效 |
goto_first_page() | 切换为第一页 |
goto_last_page() | 切换为最后一页 |
goto_next_page() | 切换为下一页 |
goto_page(*_) | 切换到指定的页 |
goto_prev_page() | 切换为上一页 |
hide_selected_column(event=None, cid=None) | 隐藏选择的列 |
hide_selected_rows() | 隐藏选择的行 |
insert_column(index, text='', image='', command='', anchor: Anchor = 'w', width=200, minwidth=20, stretch=False) | 插入列,参数index表示插入位置(字符串'end'或大于列数的整数表示最右端),text表示表头文本,image表示表头文本左侧显示的图像,stretch表示是否可以调整列宽 |
insert_row(index='end', values=[], reload=True) | 插入行 |
insert_rows(index, rowdata) | 插入多行,重建表格视图并清除筛选条件 |
load_table_data(clear_filters=False) | 加载数据,参数表示是否清除表格的筛选条件 |
move_column_left(event=None, cid=None) | 把指定的列向左移动一列 |
move_column_right(event=None, cid=None) | 把指定的列向右移动一列 |
move_column_to_first(event=None, cid=None) | 把指定的列移动到第一列 |
move_column_to_last(event=None, cid=None) | 把指定的列移动到最后一列 |
move_row_down() | 把选择的行下移一行 |
move_selected_row_up() | 把选择的行上移一行 |
move_selected_rows_to_bottom() | 把选择的行移动到数据集最底部 |
move_selected_rows_to_top() | 把选择的行移动到数据集最顶部 |
purge_table_data() | 删除表格的所有行和列 |
reset_column_filters() | 删除所有列级筛选条件,显示所有列 |
reset_column_sort() | 按原始顺序显示列 |
reset_row_filters() | 删除所有行级筛选条件,显示所有行 |
reset_row_sort() | 按原始顺序显示行 |
reset_table() | 取消所有数据筛选条件和列排序 |
save_data_to_csv(headers, records, delimiter=',') | 保存数据至CSV文件 |
search_table_data(criteria, *columns) | 搜索表格中匹配指定条件的记录,不区分大小写且能安全处理特殊字符。参数criteria可以为任意类型的值,空字符串或None表示重置搜索条件;columns表示要搜索的列,不指定时搜索所有列 |
sort_column_data(event=None, cid=None,sort=None) | 根据指定列的数据对表格行进行排序,参数sort=0表示升序,sort=1表示降序 |
unhide_selected_column(event=None, cid=None) | 取消隐藏选择的行 |
unload_table_data() | 从表格中卸载所有数据 |
Tableview对象中每列为TableColumn类的对象,TableColumn类创建对象时语法如下,
TableColumn(tableview, cid, text, image='',
command=None, anchor=W,
width=200, minwidth=20,
stretch=False)
TableColumn类支持的属性有返回该列唯一标识符的cid,表示排序规则的columnsort(可读可写,值为0表示升序、1表示降序),返回显示索引的displayindex,返回列标题标签的headertext,返回该列在表格配置中索引的tableindex。
TableColumn类支持的方法有configure(opt=None, **kwargs)、delete()、hide()、restore_settings()、show()。
Tableview对象中每行为TableRow类的对象,TableRow类创建对象时语法如下,
TableRow(tableview, values)
TableRow类支持的属性有返回唯一标识符的iid,表示该行数据的values。该类支持的方法有build()、configure(opt=None, **kwargs)、delete()、hide()、refresh()、show(striped=False)。
