添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

昨天整了一天Tkinter的treeview,发现中文的教程乃至提问都很少,其中两个问题的解决都是靠steakoverflow上找到的……

在这里放出来我遇到并解决的问题,大家以后可能遇到的话就能省点事了~

插入方法:

import tkinter
from tkinter import ttk  # 导入内部包
li = ['王记','12','男']
root = tkinter.Tk()
root.title('测试')
tree = ttk.Treeview(root,columns=['1','2','3'],show='headings')
tree.column('1',width=100,anchor='center')
tree.column('2',width=100,anchor='center')
tree.column('3',width=100,anchor='center')
tree.heading('1',text='姓名')
tree.heading('2',text='学号')
tree.heading('3',text='性别')
tree.insert('','end',values=li)
tree.grid()
root.mainloop()

(为了省点事就不自己敲了)代码来自博客园提问:https://q.cnblogs.com/q/105829/#a_226277

tree.insert('','end',values=li)

关于“首列很宽”的问题:https://segmentfault.com/q/1010000004206667?sort=created

设置show属性为 headings 即可隐藏首列。

ttk.Treeview(frame,height=18, show = "headings" , columns =( 'a' , 'b' , 'c' , 'd' , 'e' , 'f' ))

配上一个还可以的综合一点的例子https://www.cnblogs.com/Tommy-Yu/p/4156014.html

清空方法:

参考stackoverflow的提问https://stackoverflow.com/questions/32511843/delete-and-edit-items-in-treeview-tkinter

代码是对上面的代码添加的

import tkinter
from tkinter import ttk  # 导入内部包
li = ['王记','12','男']
root = tkinter.Tk()
root.title('测试')
tree = ttk.Treeview(root,columns=['1','2','3'],show='headings')
tree.column('1',width=100,anchor='center')
tree.column('2',width=100,anchor='center')
tree.column('3',width=100,anchor='center')
tree.heading('1',text='姓名')
tree.heading('2',text='学号')
tree.heading('3',text='性别')
tree.insert('','end',values=li)
tree.grid()
def delButton(tree):
    x=tree.get_children()
    for item in x:
        tree.delete(item)
delButton(tree)
root.mainloop()

(同样是为了省事……这个就是我在博客园的那个提问的回答)

另一种方法:来自很有用但是杂的链接:https://www.cnblogs.com/wumac/p/5816764.html

items = your_treeview.get_children()
[your_treeview.delete(item) for item in items]

获取条目值

同样没见到有人问,stackoverflow上才找到的方法

https://stackoverflow.com/questions/34849035/how-to-get-the-value-of-a-selected-treeview-item

import tkinter
from tkinter import ttk  # 导入内部包
li = ['王记','12','男']
root = tkinter.Tk()
root.title('测试')
tree = ttk.Treeview(root,columns=['1','2','3'],show='headings')
tree.column('1',width=100,anchor='center')
tree.column('2',width=100,anchor='center')
tree.column('3',width=100,anchor='center')
tree.heading('1',text='姓名')
tree.heading('2',text='学号')
tree.heading('3',text='性别')
tree.insert('','end',values=li)
tree.grid()
def treeviewClick(event):#单击
    print ('单击')
    for item in tree.selection():
        item_text = tree.item(item,"values")
        print(item_text[0])#输出所选行的第一列的值
tree.bind('<ButtonRelease-1>', treeviewClick)#绑定单击离开事件===========
root.mainloop()

见函数treeview里的内容

有用的链接:https://www.cnblogs.com/Tommy-Yu/p/4156014.html

各种点击事件

事件一览表 事件代码备注鼠标左键单击按下1/Button-1/ButtonPress-1 鼠标左键单击松开ButtonRelease-1 鼠标右键单击3 鼠标左键双击Double-1/Double-Button-1 鼠标右键双击Double-3 鼠标滚轮单击2 鼠标滚轮双击Double-2 鼠标移动B1-Motion 鼠标移动到区域Enter 鼠标离开区域Leave 获得键盘焦点FocusIn 失去键盘焦点FocusOut 键盘事件Key 回车键Return 控件尺寸变Configure

来自:https://www.cnblogs.com/wumac/p/5842393.html

tree.bind('<ButtonRelease-1>', treeviewClick)#绑定单击离开事件===========

在bind方法里的'<>'添上相应的事件代码就好了,后面的treeview就是我定义的函数

标题点击排序

https://blog.csdn.net/mikewolfli/article/details/51393933(强烈怀疑此链接是没注明来源,来自下面的链接的代码)

https://stackoverflow.com/questions/22032152/python-ttk-treeview-sort-numbers(不按默认桶排序的方法)

https://stackoverflow.com/questions/1966929/tk-treeview-column-sort(python3可用的见此链接最下面)

试验可运行代码

import random
from tkinter import ttk
from tkinter import *
root = Tk()     # 初始旷的声明
columns=("a","b","c")
treeview=ttk.Treeview(root,height=18,show="headings",columns=columns )#表格 
treeview.column('a', width=50, anchor='center') 
treeview.column('b', width=100, anchor='center') 
treeview.column('c', width=80, anchor='center')
treeview.heading('a', text='列1')
treeview.heading('b', text='列2')
treeview.heading('c', text='列3')
treeview.pack(side=LEFT,fill=BOTH)
for i in range(10):
    treeview.insert('',i,values=(str(random.randint(0,9)),str(random.randint(0,9)),str(random.randint(0,9))))
def treeview_sort_column(tv, col, reverse):#Treeview、列名、排列方式
    l = [(tv.set(k, col), k) for k in tv.get_children('')]
    print(tv.get_children(''))
    l.sort(reverse=reverse)#排序方式
    # rearrange items in sorted positions
    for index, (val, k) in enumerate(l):#根据排序后索引移动
        tv.move(k, '', index)
        print(k)
    tv.heading(col, command=lambda: treeview_sort_column(tv, col, not reverse))#重写标题,使之成为再点倒序的标题
#莫名其妙????写循环的话只有最后一列管用,看论坛说的好像是python2.7管用
for col in columns:
    treeview.heading(col, text=col, command=lambda: treeview_sort_column(treeview, col, False))
#基本用法(上边注释的只有最后一列管用、索性手工试验一下可用性,证实可行)
treeview.heading('a', text='123', command=lambda: treeview_sort_column(tree, 'a', False))#重建标题,添加控件排序方法
treeview.heading('b', text='111', command=lambda: treeview_sort_column(tree, 'b', False))#重建标题,添加控件排序方法
treeview.heading('c', text='223', command=lambda: treeview_sort_column(tree, 'c', False))#重建标题,添加控件排序方法
#这个代码对于python3就管用了
for col in columns:#给所有标题加(循环上边的“手工”)
    treeview.heading(col, text=col, command=lambda _col=col: treeview_sort_column(treeview, _col, False))
root.mainloop()#进入消息循环
Python 的 Treeview 手册  https://docs. python .org/3.1/library/ tkinter . ttk .html?highlight= treeview # tkinter . ttk . Treeview 一个不错 的 博客文章 https://blog.csdn.net/sinat_27382047/article/details/80161637 按列内 的 值 进行 排序 htt...
tkinter 的 Treeview 可以实现类似table 的 表格效果,如果和滚动条结合就更加完美了。结果反复探讨,实现 的 方式如下 from tkinter import * from tkinter . ttk import Treeview window=Tk() window.geometry('200x450') cols = ("姓名", "IP地址") ybar=Scrollbar(window,orient='vertical') #竖直滚动条 tree= Treeview (window,sh
董付国老师系列教材《 Python 程序设计基础》(ISBN:9787302410584) 、 《 Python 程序设计(第2版)》(ISBN:9787302436515) 、 《 Python 可以这样学》(ISBN:9787302456469)配套视频,通过大量实际案例讲解 Python 3.5.x和3.6.x中 的 tkinter 编程。 方法 描述 bbox(item, column=None) 返回指定item 的 框选范围,或者单元格 的 框选范围 column( cid, option=None, **kw) 设置或者查询某一列 的 属性 delete(*items) 删除指定行或者节点(含子节点) detach(*items) 与delete类似,不过不是真正删除,而是隐藏了相关内容。可以用move方法重新显示 exi...
第22章 树形列表控件( Treeview ) 树形列表控件(Treeviw)实现了一种层次化 的 结构数据,用户可以用鼠标打开或者隐藏相应数据或者节点。 Treeview 是没有根节点 的 ,每一层都可以有很多 的 节点。经典 的 使用场景有: (1)表格 类似于其他语言 的 Grid控件,或者Excel表格。可以行列 的 形式展示数据。 (2)目录列表 实现文件目录 的 管理,可以展开或者折叠显示目录以及文件。 Treeview ...
如何使用 Treeview ?最典型 的 就是表格和文件目录遍历。 22.3.1 表格 这个例子是一个虚拟 的 贸易公司销售记录。分为华北 、 华东 、 华南 、 东北 、 西北 、 西南和中部6个销售区域,产品分为电子产品 、 化妆品 、 快消品和日杂4个部分。 import tkinter as tk from tkinter import ttk root = tk.Tk() root.geometry('32...
若想 获取 Treeview 中 选中 的 值 或者 条目 ,可以用这里 的 方法 https://blog.csdn.net/sinat_27382047/article/details/80161637 然后我输入了 treeview .bind(’<Button-1>’, OnTreeClick) 然后会发现,第一次点击时返回 的 是空 值 ,之后每次点击 的 值 都是上一次点击 的 值 。也就是说点击 获取 的 值 总是...
&amp;amp;amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;quot; &amp;amp;amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;quot; import tkinter win = tkinter .Tk() win.tit
TTK 的 目 的 。 TreeView 控件 的 呈现层次结构,用户可以使用鼠标动作来显示或隐藏结构 的 任何部分。 与术语“树” 的 关联是由于编程实践:树结构是一个常见 的 程序设计。严格地说,在一个 TreeView 控件显示 的 层次结构是一个森林:没有一个根,只是一个收集 的 顶级节点,每个可能包含二级节点,每个节点可以包含第三级,等等。 您可能已经遇到了这个特定 的 演示文稿作为浏览目录或文件夹层次结构 的 一种方式。整...
root = tkinter .Tk() root.title('测试') tree = ttk . Treeview (root, columns=['1', '2', '3'], show='headings') tre...