源码原始链接:https://github.com/dmnfarrell/tkintertable
教程链接:https://github.com/dmnfarrell/tkintertable/wiki/Usage
这是一个简单的小例子:
安装tkintertable
1 | pip install tkintertable |
简单使用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | from tkintertable import TableCanvas, TableModel import tkinter as tk root=tk.Tk() tframe = tk.Frame(root) tframe.pack() table = TableCanvas(tframe) table.show() model = TableModel() table = TableCanvas(tframe, model=model) table = TableCanvas(tframe, model, cellwidth=60, cellbackgr='#e3f698', thefont=('Arial',12),rowheight=18, rowheaderwidth=30, rowselectedcolor='yellow', editable=True) root.mainloop() |
如果你熟悉tkinter,会发现这个表格是一个控件,就像其他的按钮、标签一样插进去就可以了。
下面显示一下效果:
(还有一个右键菜单的,但是截屏没法截下来。):
直接从.csv中读取数据:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | from tkintertable.Testing import sampledata data=sampledata() #print(data) class TestApp(Frame): """Basic test frame for the table""" def __init__(self, parent=None): self.parent = parent Frame.__init__(self) self.main = self.master self.main.geometry('800x500+200+100') self.main.title('Test') f = Frame(self.main) f.pack(fill=BOTH,expand=1) table = TableCanvas(f) table.importCSV('....(csv路径)/test.csv') print (table.model.columnNames) table.show() return app=TestApp() app.mainloop() |
csv中文件内容:
表格显示效果:
字体并不美观,原因是我使用linux默认字体演示的。如果换个字体,效果就会更好。
直接导入.xls的方法目前我还不知道……
插入以及删除数据
初始的时候有十行五列,因此行索引在0~9,列索引在0~4都是 可以的。如果要超出的话,就会报错。
示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | from tkintertable import TableCanvas, TableModel from tkinter import * import random #from collections import OrderedDict class TestApp(Frame): """Basic test frame for the table""" def __init__(self, parent=None): self.parent = parent Frame.__init__(self) self.main = self.master self.main.geometry('800x500+200+100') self.main.title('Test') f = Frame(self.main) f.pack(fill=BOTH,expand=1) table = TableCanvas(f) data=table.model.data table.model.setValueAt(123,3,4) table.model.setValueAt('hahaha',2,4) table.model.setValueAt(repr(type('haha')),1,4) print (table.model.columnNames) table.show() return app=TestApp() app.mainloop() |
效果如图:
注意,插入类型如果不是字符串或数字的话,就极易报错。因此注意,一定要用repr()方法规范一下形式。
插入行、列
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | from tkintertable import TableCanvas, TableModel from tkinter import * import random #from collections import OrderedDict class TestApp(Frame): """Basic test frame for the table""" def __init__(self, parent=None): self.parent = parent Frame.__init__(self) self.main = self.master self.main.geometry('800x500+200+100') self.main.title('Test') f = Frame(self.main) f.pack(fill=BOTH,expand=1) table = TableCanvas(f) data=table.model.data table.show()# 注意,先show()完了之后再添加行和列,否则会报错。 for i in range(3): table.addColumn('add%d'%i) for i in range(4): table.addRow() print (table.model.columnNames) return app=TestApp() app.mainloop() |
可以看到成功的又多了几行。不过请注意,table.show()之后才能插入行和列,要不是不行的!
表头的编辑可以直接在表格显示之后右键……