核心类是 TableCanvas 和 TableModel。您可能希望访问 TableModel 类 以编程方式更改数据,否则只需将 TableCanvas 类添加到 GUI 中即可。 要导入:
from tkintertable import TableCanvas, TableModel
或
from tkintertable.Tables import TableCanvas
from tkintertable.TableModels import TableModel
要创建表,通常在应用程序 GUI 中创建一个框架并将其提供给表 构造 函数。请注意,方法用于将表添加到父框架, 因此,请避免使用包或网格方法。
tframe = Frame(master)
tframe.pack()
table = TableCanvas(tframe)
table.show()
我们还可以从一些数据创建一个模型,然后使用该模型来启动表:
model = TableModel()
table = TableCanvas(frame, model=model)
可以将以下参数传递给 TableCanvas 构造函数:
table = TableCanvas(frame, model,
cellwidth=60, cellbackgr='#e3f698',
thefont=('Arial',12),rowheight=18, rowheaderwidth=30,
rowselectedcolor='yellow', read_only=False)
在以编程方式更改表内容后,需要调用它以更新显示:
table.redraw()
可以通过从 csv 文件导入数据或创建 python 字典来填充表。要从字典导入,它的格式应为:
data = {'rec1': {'col1': 99.88, 'col2': 108.79, 'label': 'rec1'},
'rec2': {'col1': 99.88, 'col2': 108.79, 'label': 'rec2'}
}
每条记录对应于字典中的一行。将为每条记录中找到的每个子键创建列。
然后将此字典提供给构造函数:
table = TableCanvas(frame, data=data)
或者我们得到模型的句柄(或者我们可以先创建模型并将其作为参数提供给表构造函数):
model = table.model
model.importDict(data)
table.redraw()
table.importCSV(filename, sep=',')
这也可以通过右键单击表格并从弹出菜单中选择“导入表格”从 GUI 以交互方式完成。
#by column name
table.sortTable(columnName='label')
#by column index
table.sortTable(columnIndex=1)
如果参数中没有给出列名,那么GUI中将弹出一个对话框,询问可能不是您想要的名称。
#add with automatic key
table.addRow()
#add with named key, other keyword arguments are interpreted as column values
table.addRow(keyname, label='abc')
#same as above with dict as column data
table.addRow(keyname, **{'label'='abc'})
table.addColumn(colname)
#delete Rows
table.deleteRows(range(0,2))
#delete Column
table.deleteColumn(colIndex)
只需获取表模型字典的句柄并直接更改数据属性(字典),然后重新绘制表。
data = table.model.data
cols = table.model.columnNames #get the current columns
data[row][col] = value #use row and column names, not cell coordinates
table.model.setValueAt(value,rowindex,colindex) ##use cell coords
table.redrawTable()
可以通过访问表模型的列标签属性以编程方式更改列标签:
table.model.columnlabels[colname] = newlabel
默认情况下,行标题显示行索引号,但如有必要,它可用于显示行/记录键名称。您可能还希望将行标题宽度设置为大于默认值 (40) 的值。这两个选项都在构造函数中提供。
table = TableCanvas(master, model, rowheaderwidth=100, showkeynamesinheader=True)
You can hide the row header by setting rowheaderwidth=0.
在事件(例如)单击按钮时,您可以选择新行。TableCanvas 的行号是 0 索引的,因此第一行是第 0 行。要取消选择/不选择任何行,您可以使用。table.setSelectedRow(row_number)``table.setSelectedRow(-1)
要跳转到表中的特定行,请使用 [0, 1] 中的浮点数,其中 0 是绝对顶部,1 是绝对底部。table.set_yviews('moveto', y)``y
可以在构造函数方法上设置表的首选项,例如:
TableCanvas(frame, model=model,
cellwidth=50, cellbackgr='#E3F6CE',
thefont="Arial 10",rowheight=16,editable=False,
rowselectedcolor='yellow',reverseorder=1)
或者可以稍后从外部首选项文件加载:
preferences=Preferences('TablesApp')
table.loadPrefs(preferences)
Save and load from a file
table.save('test.table')
table.load('test.table')