Python—tkinter的Treeview实现带滚动条的表格(附带排序)

tkinter的Treeview可以实现类似table的表格效果,如果和滚动条结合就更加完美了。结果反复探讨,实现的方式如下

from tkinter import *
from tkinter.ttk import Treeview

#排序函数
def tree_sort_column(tree,col,reverse):   				#Treeview、列名、排列方式
  l = [(tree.set(k,col),k) for k in tree.get_children('')]
  l.sort(reverse=reverse)  		# 排序方式
  for index,(val,k) in enumerate(l):  # 根据排序后索引移动
    tree.move(k, '', index)
  tree.heading(col,command=lambda:treeview_sort_column(tree,col,not reverse)) 
#点击复制到粘贴板
def treeviewclick(event,tree):
  window.clipboard_clear()
  strs=""
  for item in tree.selection():
    item_text=tree.item(item,"values")
    strs+=item_text[0]+"\n"					#获取本行的第一列的数据
  window.clipboard_append(strs)

window=Tk()
window.geometry('200x450')
cols = ("姓名", "IP地址")
ybar=Scrollbar(window,orient='vertical')      #竖直滚动条 
tree=Treeview(window,show='headings',columns=cols,yscrollcommand=ybar.set)
ybar['command']=tree.yview      
#表头设置
for col in cols:
  tree.heading(col,text=col,command=lambda col=col:tree_sort_column(tree,col,False))             #行标题
  tree.column(col,width=80,anchor='w')   #每一行的宽度,'w'意思为靠右
#插入数据
for i in range(1,500):
  tree.insert("","end",values=("john","1.1.1.1"+str(i)))

tree.grid(row=0,column=0)				#grid方案
ybar.grid(row=0,column=1,sticky='ns')   
tree.bind('',lambda event:treeviewclick(event,tree))	#实现点击行的第一个数据复制到粘贴板
#ybar.pack(side='right',fill='y')		#pack方案
#tree.pack(fill='x')
window.mainloop()

这里pack方案网上也有,但是grid方案是我自己研究出来的。因为实际去搞布局,grid还是用的最多的。
注意grid里面的sticky='ns’就是上下填充的意思,和pack的fill='y’是一个效果。

这里包含了两个特效,一个是滚动条。一个是点击一行,这一行的第一个数据被自动复制到粘贴板。

效果如图
Python—tkinter的Treeview实现带滚动条的表格(附带排序)_第1张图片

更多的treeview的玩法,我看这个也不错:
https://blog.csdn.net/sinat_27382047/article/details/80161637

你可能感兴趣的:(tkinter,python,tkinter)