源码原始链接:https://github.com/dmnfarrell/tkintertable
教程链接:https://github.com/dmnfarrell/tkintertable/wiki/Usage
这是一个简单的小例子:
pip install tkintertable
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,会发现这个表格是一个控件,就像其他的按钮、标签一样插进去就可以了。
下面显示一下效果:
(还有一个右键菜单的,但是截屏没法截下来。):
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()
表格显示效果:
字体并不美观,原因是我使用linux默认字体演示的。如果换个字体,效果就会更好。
直接导入.xls的方法目前我还不知道……
初始的时候有十行五列,因此行索引在0~9,列索引在0~4都是 可以的。如果要超出的话,就会报错。
示例代码:
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()方法规范一下形式。
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()之后才能插入行和列,要不是不行的!
表头的编辑可以直接在表格显示之后右键……