tkinter 表格
1. 简介
tkinter 是 Python 中常用的图形用户界面(GUI)库之一,它提供了创建各种窗口、按钮、标签、文本框等界面元素的功能。在 tkinter 中,我们可以使用表格来展示和编辑数据。本文将详细介绍如何使用 tkinter 创建和操作表格。
2. 安装 tkinter
tkinter 是 Python 的标准库,所以在大多数 Python 版本中已经默认安装了 tkinter。如果你使用的是较旧的 Python 版本,可以参考官方文档进行安装。
3. 创建表格
要创建一个 tkinter 表格,我们可以使用 tkinter.ttk.Treeview
类。以下是创建一个简单表格的示例代码:
import tkinter as tk
from tkinter import ttk
# 创建主窗口
root = tk.Tk()
# 创建表格
tree = ttk.Treeview(root)
# 添加表头
tree["columns"] = ("Name", "Age", "Gender")
tree.heading("#0", text="ID")
tree.heading("Name", text="姓名")
tree.heading("Age", text="年龄")
tree.heading("Gender", text="性别")
# 添加数据
tree.insert("", tk.END, text="1", values=("Alice", "18", "女"))
tree.insert("", tk.END, text="2", values=("Bob", "21", "男"))
tree.insert("", tk.END, text="3", values=("Charlie", "25", "男"))
# 显示表格
tree.pack()
# 主循环
root.mainloop()
上述代码首先导入 tkinter 和 ttk 模块,然后创建一个名为 root
的主窗口。接着,我们使用 ttk.Treeview
类创建了一个表格对象 tree
。然后,我们使用 heading
方法为表格添加了表头,并定义了每一列的标题。接下来,我们使用 insert
方法向表格中插入数据。最后,我们调用 pack
方法将表格显示在主窗口上,并使用 mainloop
方法启动主循环。
运行上述代码,我们将得到一个包含表头和数据的简单表格。
4. 表格样式
tkinter 表格的样式可以通过 ttk.Style
类进行自定义。下面是一个示例,展示了如何更改表格的背景颜色和字体样式:
import tkinter as tk
from tkinter import ttk
# 创建主窗口
root = tk.Tk()
# 创建表格
tree = ttk.Treeview(root)
# 样式设置
style = ttk.Style()
style.configure("Treeview",
background="#E1F5FE",
foreground="black",
font=("Arial", 12))
# 添加表头
tree["columns"] = ("Name", "Age", "Gender")
tree.heading("#0", text="ID")
tree.heading("Name", text="姓名")
tree.heading("Age", text="年龄")
tree.heading("Gender", text="性别")
# 添加数据
tree.insert("", tk.END, text="1", values=("Alice", "18", "女"))
tree.insert("", tk.END, text="2", values=("Bob", "21", "男"))
tree.insert("", tk.END, text="3", values=("Charlie", "25", "男"))
# 显示表格
tree.pack()
# 主循环
root.mainloop()
在上述代码中,我们先创建了一个名为 style
的 ttk.Style
对象。然后,通过调用 configure
方法来修改表格的样式。在这个示例中,我们将表格的背景颜色设置为浅蓝色(#E1F5FE),前景颜色设置为黑色(”black”),并将字体设置为 Arial 大小为 12。
5. 表格数据的增删改查
5.1 添加数据
要向表格中添加数据,可以使用 insert
方法。在上述示例代码中,我们使用了以下代码来向表格中插入数据:
# 添加数据
tree.insert("", tk.END, text="1", values=("Alice", "18", "女"))
tree.insert("", tk.END, text="2", values=("Bob", "21", "男"))
tree.insert("", tk.END, text="3", values=("Charlie", "25", "男"))
insert
方法的第一个参数是父节点的 ID,如果该数据是顶层数据,则可以使用空字符串。text
参数表示节点的 ID,可以是数字或字符串。values
参数是一个元组,包含了该行数据的值。
5.2 删除数据
要删除表格中的数据,可以使用 delete
方法。以下是一个示例代码,展示了如何删除表格中指定的行数据:
# 删除第一行数据
tree.delete("1")
上述代码通过调用 delete
方法并传入要删除行的 ID 来删除了表格中的第一行数据。
5.3 修改数据
要修改表格中的数据,可以使用 item
方法。以下是一个示例代码,展示了如何修改表格中指定单元格的值:
# 修改第一行第二列的值
tree.item("1", values=("Alice", "20", "女"))
上述代码通过调用 item
方法,并传入要修改行的 ID 和新的值来修改了指定单元格的值。
5.4 查询数据
要查询表格中的数据,可以使用 item
方法。以下是一个示例代码,展示了如何获取表格中指定单元格的值:
# 获取第二行的第一列的值
value = tree.item("2")["values"][0]
print(value)
上述代码通过调用 item
方法,并传入要查询的行的 ID 来获取指定单元格的值。在这个示例中,我们获取了第二行的第一列的值并打印出来。
6. 表格事件
在 tkinter 中,我们可以为表格添加事件处理函数,以响应用户的操作。以下是一个示例代码,展示了如何为表格添加双击事件的处理函数:
import tkinter as tk
from tkinter import ttk
# 创建主窗口
root = tk.Tk()
# 创建表格
tree = ttk.Treeview(root)
# 添加表头
tree["columns"] = ("Name", "Age", "Gender")
tree.heading("#0", text="ID")
tree.heading("Name", text="姓名")
tree.heading("Age", text="年龄")
tree.heading("Gender", text="性别")
# 添加数据
tree.insert("", tk.END, text="1", values=("Alice", "18", "女"))
tree.insert("", tk.END, text="2", values=("Bob", "21", "男"))
tree.insert("", tk.END, text="3", values=("Charlie", "25", "男"))
# 双击事件处理函数
def on_double_click(event):
item = tree.focus()
values = tree.item(item)["values"]
print(values)
# 绑定双击事件
tree.bind("<Double-1>", on_double_click)
# 显示表格
tree.pack()
# 主循环
root.mainloop()
在上述代码中,我们创建了名为 on_double_click
的双击事件处理函数。该函数通过调用 focus
方法获取被双击的行的 ID,然后使用 item
方法获取该行的值,最后打印出来。然后,我们使用 bind
方法将双击事件与表格绑定,并将其指定为 "<Double-1>"
,表示鼠标左键的双击事件。
运行上述代码,当我们双击表格中的某一行时,将会打印该行的值。
7. 表格数据的保存和加载
如果我们想要保存表格中的数据,以便后续加载和使用,可以使用 Python 的文件操作功能。以下是一个示例代码,展示了如何将表格中的数据保存到 CSV 文件中:
import tkinter as tk
from tkinter import ttk
import csv
# 创建主窗口
root = tk.Tk()
# 创建表格
tree = ttk.Treeview(root)
# 添加表头
tree["columns"] = ("Name", "Age", "Gender")
tree.heading("#0", text="ID")
tree.heading("Name", text="姓名")
tree.heading("Age", text="年龄")
tree.heading("Gender", text="性别")
# 添加数据
tree.insert("", tk.END, text="1", values=("Alice", "18", "女"))
tree.insert("", tk.END, text="2", values=("Bob", "21", "男"))
tree.insert( "", tk.END, text="3", values=("Charlie", "25", "男"))
# 保存数据到 CSV 文件
def save_data():
with open("data.csv", mode="w", newline="") as file:
writer = csv.writer(file)
writer.writerow(["ID", "姓名", "年龄", "性别"]) # 写入表头
for child in tree.get_children():
values = tree.item(child)["values"]
writer.writerow([tree.item(child)["text"]] + values)
# 加载数据
def load_data():
tree.delete(*tree.get_children())
with open("data.csv", mode="r") as file:
reader = csv.reader(file)
headers = next(reader) # 读取表头
tree["columns"] = tuple(headers[1:]) # 更新表头
tree.heading("#0", text=headers[0])
for row in reader:
tree.insert("", tk.END, text=row[0], values=tuple(row[1:]))
# 创建按钮并绑定事件
save_button = tk.Button(root, text="保存数据", command=save_data)
load_button = tk.Button(root, text="加载数据", command=load_data)
save_button.pack()
load_button.pack()
# 显示表格
tree.pack()
# 主循环
root.mainloop()
在上述代码中,我们首先创建了两个按钮,一个用于保存数据,一个用于加载数据。当我们点击保存按钮时,将会将表格中的所有数据保存到名为 “data.csv” 的 CSV 文件中。而当我们点击加载按钮时,将会从 “data.csv” 文件中加载数据,并显示在表格中。
运行上述代码,我们可以通过点击保存按钮将表格中的数据保存下来,然后再通过点击加载按钮将数据重新加载到表格中。
8. 总结
本文介绍了如何使用 tkinter 创建和操作表格。我们学习了如何创建表格、修改表格样式、添加、删除、修改和查询表格数据,以及如何处理表格的事件。此外,我们还学习了如何将表格数据保存到文件中并加载回来。