zoukankan      html  css  js  c++  java
  • Tkinter 之TreeView表格与树状标签

    一、TreeView介绍

    TreeView组件是一个树状结构和表格的结合体。第一列是树状结构,后几列是列表。每一行表示一个item,树的item可以分级,每个item有子item,名称对应text标签。每一行的值用values元组里的值表示。

    item有5个标签,分别是:text,image,values,open,tags。

    二、参数说明

    1、TreeView参数:

    参数作用
    columns   值是一个列表。列表里每个元素代表一个列标识符的名称。列表的长度为列的长度。
    displaycolumns  列表,这里的元素是列表符,表示的是哪些列可以显示以及顺序,或者用‘#all’表示全部显示
    height  表示要显示几行数据(注意:这个部件的宽度是根据列的多少自动定义的)
    padding  填充,是个最多4个元素的列表
    selectmode  定义如何去选择一行。"extended"是可选多行(用Ctrl+鼠标), “browse” 是只能选一行, “none"是不能改变选择,默认是"extended”
    show  表示这个部件显示哪种功能,“tree”表示仅显示第一列(单树模式),“headings”表示显示除一列的其他列(单列表模式),默认是"tree headings",显示所有列。注意,‘#0’(第一列)是永远存在的

    2、item参数:

    选项描述
    text 树状结构这边的名称。
    image 树状结构这边的名称的左边加个图。
    values 列表结构这边每一行的值,values未赋值的列会为空值,超过列的长度会被截断。
    open 布尔值,代表子item的显示打开或关闭
    tags 与item关联的标记

     3、tag参数

    选项描述
    foreground 前景色
    background 背景色
    font 字体
    image

    三、TreeView可选事件和方法

    << TreeviewSelect>>,代表选择变化是发生;
    << TreeviewOpen>>,item的open=True时发生
    << TreeviewClose>>,item的open=False时发生

    提示:可用 Treeview.focus() 和 Treeview.selection() 可获取 item 或 items.

    方法列表:

    bbox(item, column=None)
    返回一个item的范围(x,y,width, height),如果column指定了一个列,则返回一个元素范围,如果item不可视,则返回空值。

    get_children(item=None)
    返回一个item的所有子item,这个子item是一个列表形式,如果item没指定,则返回根目录的item

    set_children(item, *newchildren)
    设置一个item的新子item。这里设置了之后实际是全部替换

    column(column, option=None, **kw)
    给各列设置属性,或返回属性。
    第一个column是列标识符
    第二个option,如果不设置则返回所有属性的字典,如果设置则返回那个属性的值。
    kw里的option有5个
    id:只读属性,返回列名。
    anchor:文字在cell里的对齐方式,标准的tk的anchor属性
    min 值,单位是像素,列的最小宽度
    stretch: 布尔值,表示列的宽度是否随整个部件的改动而变化。
    width:列宽,单位是像素。
    提示:如果要设置树状结构那列,用column=“#0”

    delete(*items)
    删除item及其子item

    detach(*items)
    断开item及其子item,这里的断开只是不显示,以后还可以链接起来。

    exists(item)
    返回True,如果item在树里。

    focus(item=None)
    如果不指定item,则返回当前获得焦点的item,如果指定item,则让该item获得焦点。若无则返回空值。

    heading(column, option=None, **kw)
    查询或修改指定列的标题选项
    第一个column是列标识符
    第二个option,如果不设置则返回所有属性的字典,如果设置则返回那个属性的值。
    kw里的option有4个
    text:列头名
    image: 列头名右的图像
    anchor:文字在heading里的对齐方式,标准的tk的anchor属性
    command:点击列头的回调函数

    insert(parent, index, iid=None, **kw)
    创建新item并返回新创建item的项标识符。
    parent:用item ID表示父item,或者‘’表示根item
    index:数值int,或‘end’,表示item插入的位置
    iid:item标识符,可自动生成
    kw:看上面的Item Options介绍。

    item(item, option=None, **kw)
    查询或修改指定item的选项

    selection(selop=None, items=None)
    如果没指定selop则返回所有选中的items,列表形式,若selop指定了selection methods,则相应act。

    set(item, column=None, value=None)
    指定item,如果不设定column和value,则返回他们的字典,如果设定了column,则返回该column的value,如果value也设定了,则作相应更改。

    四、代码示例

    1、表格代码:

    import tkinter as tk
    from tkinter import ttk
    
    window = tk.Tk()
    # 设置窗口大小
    winWidth = 600
    winHeight = 400
    # 获取屏幕分辨率
    screenWidth = window.winfo_screenwidth()
    screenHeight = window.winfo_screenheight()
    
    x = int((screenWidth - winWidth) / 2)
    y = int((screenHeight - winHeight) / 2)
    
    # 设置主窗口标题
    window.title("TreeView参数说明")
    # 设置窗口初始位置在屏幕居中
    window.geometry("%sx%s+%s+%s" % (winWidth, winHeight, x, y))
    # 设置窗口图标
    window.iconbitmap("./image/icon.ico")
    # 设置窗口宽高固定
    window.resizable(0, 0)
    
    # 定义列的名称
    columns = ("name", "gender", "age")
    tree = ttk.Treeview(window, show = "headings", columns = columns, selectmode = tk.BROWSE)
    
    # 设置表格文字居中
    tree.column("name", anchor = "center")
    tree.column("gender", anchor = "center")
    tree.column("age", anchor = "center")
    
    # 设置表格头部标题
    tree.heading("name", text = "姓名")
    tree.heading("gender", text = "性别")
    tree.heading("age", text = "年龄")
    
    # 设置表格内容
    lists = [{"name": "yang", "gender": "男", "age": "18"}, {"name": "郑", "gender": "女", "age": "25"}]
    i = 0
    for v in lists:
        tree.insert('', i, values = (v.get("name"), v.get("gender"), v.get("age")))
        i += 1
    
    tree.pack(expand = True, fill = tk.BOTH)
    
    
    # 获取当前点击行的值
    def treeviewClick(event):  # 单击
        for item in tree.selection():
            item_text = tree.item(item, "values")
            print(item_text)
    
    # 鼠标左键抬起
    tree.bind('<ButtonRelease-1>', treeviewClick)
    
    # 鼠标选中一行回调
    def selectTree(event):
        for item in tree.selection():
            item_text = tree.item(item, "values")
            print(item_text)
        
    # 选中行
    #tree.bind('<<TreeviewSelect>>', selectTree)
    
    window.mainloop()
    

    2、树状代码:

    import tkinter as tk
    from tkinter import ttk
    
    window = tk.Tk()
    # 设置窗口大小
    winWidth = 600
    winHeight = 400
    # 获取屏幕分辨率
    screenWidth = window.winfo_screenwidth()
    screenHeight = window.winfo_screenheight()
    
    x = int((screenWidth - winWidth) / 2)
    y = int((screenHeight - winHeight) / 2)
    
    # 设置主窗口标题
    window.title("TreeView参数说明")
    # 设置窗口初始位置在屏幕居中
    window.geometry("%sx%s+%s+%s" % (winWidth, winHeight, x, y))
    # 设置窗口图标
    window.iconbitmap("./image/icon.ico")
    # 设置窗口宽高固定
    window.resizable(0, 0)
    
    # 定义列的名称
    tree = ttk.Treeview(window, show = "tree")
    
    myid=tree.insert("",0,"中国",text="中国China",values=("1"))  # ""表示父节点是根
    myidx1=tree.insert(myid,0,"广东",text="中国广东",values=("2"))  # text表示显示出的文本,values是隐藏的值
    myidx2=tree.insert(myid,1,"江苏",text="中国江苏",values=("3"))
    myidy=tree.insert("",1,"美国",text="美国USA",values=("4"))    
    myidy1=tree.insert(myidy,0,"加州",text="美国加州",values=("5"))
    
    # 鼠标选中一行回调
    def selectTree(event):
        for item in tree.selection():
            item_text = tree.item(item, "values")
            print(item_text)
        
    # 选中行
    tree.bind('<<TreeviewSelect>>', selectTree)
    
    tree.pack(expand = True, fill = tk.BOTH)
    
    window.mainloop()
    

      

    五、效果图

     

  • 相关阅读:
    微软VS2008月底推出beta 2中文版 搭配.NET 3.5
    Asp.Net AjaxPasswordstrength控件使用
    Asp.Net AjaxHoverMenu控件使用
    Asp.Net Ajax AutoComplete控件使用
    ASP.NET中基类页的设计和使用
    Asp.Net中页面间传值方法
    基于ASP.NET AJAX技术开发在线RSS阅读器(上篇)
    Asp.Net AjaxFilteredTextBox控件使用
    基于ASP.NET AJAX技术开发在线RSS阅读器(下篇)
    Asp.Net AjaxTextBoxWateramrk控件使用
  • 原文地址:https://www.cnblogs.com/yang-2018/p/11824250.html
Copyright © 2011-2022 走看看