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

B站影视 2024-12-24 16:39 8

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

在本文中,将介绍 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'120)
tree.column('email'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('>', 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'120)
tree.column('email'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)

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

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

Treeview 添加删除数据

在数据表开头添加数据:

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

在数据表末尾添加数据:

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

访问选择的数据:

删除数据:

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

defadd:
tree.insert('', 0, values=(f'{name.get}', f'{gender.get}', f'{email.get}'))
defdelete:
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'120)
tree.column('email'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

来源:爱锐教育

相关推荐