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('<ButtonRelease-1>',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’是一个效果。

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

效果如图
在这里插入图片描述

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

  • 12
    点赞
  • 106
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值