添加链接
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...