treeview

昨天整了一天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('', 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('', 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()#进入消息循环

 


---------------------
作者:超自然祈祷
来源:CSDN
原文:https://blog.csdn.net/sinat_27382047/article/details/80161637
版权声明:本文为博主原创文章,转载请附上博文链接!

你可能感兴趣的:(Python)