Python GUI 编程:tkinter 初学者入门指南——Ttk 树视图 Treeview

Python3.8

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

在本文中,将介绍 Tkinter Treeview 树视图小部件以及如何使用它来显示表格和分层数据。Tkinter 中,没有专门的表格部件,Treeview 可以很好地显示表格数据,支持多列显示。

要创建 Treeview 树视图小部件,可以使用以下构造函数:

tree = ttk.Treeview(master, **options)

Treeview 显示表格数据

自定义列,列宽,对齐方式

tree.column('name', anchor=tk.CENTER, width=200)

设置列标题

tree.heading('name', text='姓名')

import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('Treeview 树视图演示')
columns = ('name', 'gender', 'email') # 元组,用于创建列
# 创建树视图,指定列,显示元素,行数
tree = ttk.Treeview(root, columns=columns, show='headings', height=18)
tree.column('name', anchor=tk.CENTER, width=200)
tree.column('gender', anchor=tk.CENTER, width=120)
tree.column('email', anchor=tk.CENTER, width=260)
# 设置列标题
tree.heading('name', text='姓名')
tree.heading('gender', text='性别')
tree.heading('email', text='电子邮箱')
# 数据表插入数据
for n in range(1, 100):
    tree.insert('', tk.END, values=(f'name {n}', f'female/male', f'email{n}@example.com'))
tree.grid(row=0, column=0, sticky='nsew', pady=5)
# 数据表加滚动条
scrollbar = ttk.Scrollbar(root, orient=tk.VERTICAL, command=tree.yview)
tree.configure(yscroll=scrollbar.set)
scrollbar.grid(row=0, column=1, sticky='ns')
root.mainloop()

Treeview 选择数据

访问选择的数据:

for selected_item in tree.selection()

绑定项目选择事件:

tree.bind('<<TreeviewSelect>>', item_selected)

import tkinter as tk
from tkinter import ttk
from tkinter.messagebox import showinfo
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('Treeview 树视图演示')
columns = ('name', 'gender', 'email') # 元组,用于数据表列标
# 创建树视图,指定列标,显示元素,行数
tree = ttk.Treeview(root, columns=columns, show='headings', height=18)
# 设置列宽,对齐方式
tree.column('name', anchor=tk.CENTER, width=160)
tree.column('gender', anchor=tk.CENTER, width=120)
tree.column('email', anchor=tk.CENTER, width=300)
# 设置列标显示的文字
tree.heading('name', text='姓名')
tree.heading('gender', text='性别')
tree.heading('email', text='邮箱')
# 数据表插入数据
for n in range(1, 100):
    tree.insert('', tk.END, values=(f'name {n}', f'female/male', f'email{n}@example.com'))
tree.grid(row=0, column=0, sticky='nsew', pady=5, rowspan=5)
# 数据表加滚动条
scrollbar = ttk.Scrollbar(root, orient=tk.VERTICAL, command=tree.yview)
tree.configure(yscroll=scrollbar.set)
scrollbar.grid(row=0, column=1, sticky='ns', rowspan=5)

def item_selected(event):
    for selected_item in tree.selection():
        item = tree.item(selected_item)
        record = item['values']
        showinfo(title='你选择了', message=','.join(record))

tree.bind('<<TreeviewSelect>>', item_selected)
root.mainloop()

Treeview 添加删除数据

在数据表开头添加数据:

tree.insert('', 0, values=contact)

在数据表末尾添加数据:

tree.insert('', tk.END, values=contact)

访问选择的数据:

for selected_item in tree.selection()

删除数据:

tree.delete(selected_item)

import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('Treeview 树视图演示')
name = tk.StringVar()
gender = tk.StringVar()
email = tk.StringVar()

def add():
    tree.insert('', 0, values=(f'{name.get()}', f'{gender.get()}', f'{email.get()}'))
def delete():
    for selected_item in tree.selection():
        tree.delete(selected_item)
columns = ('name', 'gender', 'email') # 元组,用于数据表列标
# 创建树视图,指定列标,显示元素,行数
tree = ttk.Treeview(root, columns=columns, show='headings', height=18)
# 设置列宽,对齐方式
tree.column('name', anchor=tk.CENTER, width=120)
tree.column('gender', anchor=tk.CENTER, width=120)
tree.column('email', anchor=tk.CENTER, width=160)
# 设置列标显示的文字
tree.heading('name', text='姓名')
tree.heading('gender', text='性别')
tree.heading('email', text='邮箱')
# 数据表插入数据
for n in range(1, 100):
    tree.insert('', tk.END, values=(f'name {n}', f'female/male', f'email{n}@example.com'))
tree.grid(row=0, column=0, sticky='nsew', pady=5, rowspan=5)
# 数据表加滚动条
scrollbar = ttk.Scrollbar(root, orient=tk.VERTICAL, command=tree.yview)
tree.configure(yscroll=scrollbar.set)
scrollbar.grid(row=0, column=1, sticky='ns', rowspan=5)

name_label = tk.Label(root, text="姓名")
name_label.grid(row=0, column=2)
name_entry = tk.Entry(root, width=15, textvariable=name)
name_entry.grid(row=0, column=3)
gender_label = tk.Label(root, text="性别")
gender_label.grid(row=1, column=2)
gender_entry = tk.Entry(root, width=15, textvariable=gender)
gender_entry.grid(row=1, column=3)
email_label = tk.Label(root, text="邮箱")
email_label.grid(row=2, column=2)
email_entry = tk.Entry(root, width=15, textvariable=email)
email_entry.grid(row=2, column=3)
button1 = tk.Button(root, text="添加", command=add, width=10)
button1.grid(row=3, column=3)
button2 = tk.Button(root, text="删除", command=delete, width=10)
button2.grid(row=4, column=3)
root.mainloop()

Treeview 显示分层数据

添加项目

tree.insert('', tk.END, text='山东省', iid=0, open=False)

利用 iid ,将项目移动到某个项目作为子项目

tree.move(5, 0, 1)

将 iid 为 5 的项目移到 iid 为 0 的项目中,作为子项目,排在第二位。

import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('Treeview 树视图演示')
root.rowconfigure(0, weight=1)
root.columnconfigure(0, weight=1)

tree = ttk.Treeview(root)
tree.heading('#0', text='行政区划', anchor=tk.W)

tree.insert('', tk.END, text='山东省', iid=0, open=False)
tree.insert('', tk.END, text='江苏省', iid=1, open=False)
tree.insert('', tk.END, text='吉林省', iid=2, open=False)
tree.insert('', tk.END, text='北京市', iid=3, open=False)
tree.insert('', tk.END, text='上海市', iid=4, open=False)

tree.insert('', tk.END, text='济南', iid=5, open=False)
tree.insert('', tk.END, text='青岛', iid=6, open=False)
tree.insert('', tk.END, text='淄博', iid=7, open=False)
tree.move(5, 0, 0)
tree.move(6, 0, 1)
tree.move(7, 0, 2)
tree.insert('', tk.END, text='长春', iid=8, open=False)
tree.insert('', tk.END, text='吉林', iid=9, open=False)
tree.move(8, 2, 0)
tree.move(9, 2, 1)
tree.grid(row=0, column=0, sticky=tk.NSEW)
root.mainloop()

 

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

信息科技云课堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值