【附源码】ttkbootstrap实现GUI信息管理系统

【附源码】ttkbootstrap实现GUI信息管理系统

效果预览

运行截图-2-3比4

环境搭建

  • Python 3.8 +
  • ttkbootstrap 1.10.1

功能实现

展示学生信息表格

使用ttk.Treeview组件展示数据。

tv = ttk.Treeview(master=table_frame, columns=columns, show=HEADINGS, bootstyle="primary", height=15)
for column, header, width in zip(columns, headers, width_es):
    tv.column(column, width=width, anchor="w")
    tv.heading(column, text=header, anchor="w")
tv.grid(row=0, column=0, sticky="nsew")

这段代码首先创建了一个Treeview实例,然后设置了列的名称和宽度,并将表格放置在界面上。

新增学生信息表单

创建表单窗口,输入学生信息,并添加到表格。

def open_form_window(action, item=None):
    # ... 省略窗口创建和控件布局代码 ...
    def save_data():
        # 从表单控件中获取数据
        name = name_entry.get()
        student_id = student_id_entry.get()
        age = age_entry.get()
        class_val = class_entry.get()
        # 将数据添加到全局数据列表和表格视图中
        table_data.append((id, name, student_id, age, class_val, create_time))
        tv.insert('', END, values=(id, name, student_id, age, class_val, create_time))
    # ... 省略窗口创建和控件布局代码 ...

修改学生信息表单

选择表格中的项,弹出表单窗口进行编辑。

def edit_data():
    selected_item = tv.selection()
    if len(selected_item) == 1:
        item = selected_item[0]
        values = tv.item(item, "values")
        open_form_window("修改", values)
    # ... 省略其他逻辑 ...

这段代码首先获取用户在表格中选择的项,然后使用open_form_window函数打开一个表单窗口,并传入当前选择项的值。

删除学生信息

选择表格中的项,点击删除按钮进行删除。

def delete_data():
    selected_item = tv.selection()
    for item in selected_item:
        tv.delete(item)

这段代码通过tv.selection()获取用户选择的项,然后使用tv.delete(item)删除这些项。

代码解析

  • 数据结构:使用列表的列表来存储学生信息,每个内部列表代表一个学生记录。
  • 事件处理:通过绑定按钮的command属性到相应的函数来处理用户交互,例如点击“保存”按钮时调用save_data函数。
  • 窗口布局:使用grid布局管理器来组织窗口中的控件,通过设置sticky参数来控制控件的扩展行为。

完整代码

import tkinter as tk
import ttkbootstrap as ttk
from ttkbootstrap.constants import *

root = ttk.Window(themename="lumen")
root.title("学生信息管理-GUI版本")
root.geometry("1000x900")

table_data = [
    (1, '刘亚索', "001", 15, "软件一班", "2023-07-04"),
    (2, '王一博', "002", 16, "软件三班", "2023-07-02"),
    (3, '鸡你美', "003", 14, "大数据八班", "2023-07-08"),
    (4, '美羊羊', "004", 17, "软件二班", "2023-07-09"),
    (5, '沸羊羊', "005", 15, "AI五班", "2023-07-06"),
    (6, 'man羊羊', "006", 15, "火箭三班", "2023-07-06"),
    (7, '喜羊羊', "006", 15, "火箭三班", "2023-07-06"),
    (8, 'lan羊羊', "006", 15, "用力五班", "2023-07-06"),
    (9, '少羊羊', "006", 15, "火箭三班", "2023-07-06"),
    (10, '托尼', "006", 15, "火箭三班", "2023-07-06"),
    (11, '黑人大哥', "006", 15, "火箭三班", "2023-07-06"),
] #统计用

def open_form_window(action, item=None):
    """表单窗口视图与逻辑"""
    id, name, student_id, age, class_val, create_time = '', '', '', '', '', ''
    if item is not None:
        id, name, student_id, age, class_val, create_time = item
        # print("编辑选中的数据:", item)
        print(id, name, student_id, age, class_val, create_time)
    else:
        print("item is None")
    form_window = tk.Toplevel(root)
    form_window.title(action + "学生")
    form_window.geometry("500x500")

    # 表单控件
    ttk.Frame(form_window,height=50).grid(row=0, column=0, sticky='e')

    start_row = 1
    ttk.Label(form_window, text="姓名:").grid(row=start_row, column=0, sticky='e')
    name_var = tk.StringVar()
    name_entry = ttk.Entry(form_window,textvariable=name_var)
    name_entry.grid(row=start_row, column=1,padx=20, pady=20, sticky='w')
    name_var.set(name)

    ttk.Label(form_window, text="学号:").grid(row=start_row+1, column=0, sticky="e")
    student_id_var = tk.StringVar()
    student_id_entry = ttk.Entry(form_window, textvariable=student_id_var)
    student_id_entry.grid(row=start_row + 1, column=1, padx=20, pady=10,sticky="w")
    student_id_var.set(student_id)

    ttk.Label(form_window, text="年龄:").grid(row=start_row+2, column=0, sticky="e")
    age_var = tk.StringVar()
    age_entry = ttk.Entry(form_window, textvariable=age_var)
    age_entry.grid(row=start_row + 2, column=1, padx=20, pady=10, sticky="w")
    age_var.set(age)

    ttk.Label(form_window, text="班级:").grid(row=start_row+3, column=0, sticky="e")
    class_var = tk.StringVar()
    class_entry = ttk.Entry(form_window, textvariable=class_var)
    class_entry.grid(row=start_row + 3, column=1, padx=20, pady=10, sticky="w")
    class_var.set(class_val)

    def save_data():
        """保存数据"""
        name = name_entry.get()
        student_id = student_id_entry.get()
        age = age_entry.get()
        class_val = class_entry.get()

        if action == "新增":
            # todo 在这里实现新增逻辑
            table_data.append((id, name ,  student_id ,age,class_val,create_time))
            tv.insert('', len(table_data)-1, values=(id, name ,  student_id ,age,class_val,create_time))
        elif action == "修改":
            # todo 在这里实现修改逻辑
            selected_item = tv.selection()
            if len(selected_item) == 1:
                item = selected_item[0]
                # values = tv.item(item, "values")
                index = tv.index(item)
                table_data[index] = (name, student_id, age, class_val)
                tv.item(item, values= (name, student_id, age, class_val))
            else:
                print("请选择一项进行编辑")
        form_window.destroy()

    button = ttk.Button(form_window,width=20, text="保存", command=save_data)
    button.grid(column=1, pady=20, sticky="w")
    # button.grid_columnconfigure(1, weight=1)
    form_window.grid_columnconfigure(0, weight=1)
    form_window.grid_columnconfigure(1, weight=1)
    form_window.mainloop()

def delete_data():
    """删除选中的数据"""
    selected_item = tv.selection()
    for item in selected_item:
        tv.delete(item)

def edit_data():
    """编辑选中的数据"""
    selected_item = tv.selection()
    if len(selected_item) == 1:
        item = selected_item[0]
        values = tv.item(item, "values")
        open_form_window("修改", values)
    else:
        print("请选择一项进行编辑")

def init_data():
    """初始化表格数据"""
    for row in table_data:
        tv.insert('', END, values=row)

#==========操作模块=====================
operate_frame = ttk.Frame(root ,width=500,height=300)
operate_frame.grid(row=0, column=0,padx=10,pady=20)

ttk.Label(operate_frame, text="姓名:").grid(row=0, column=0, sticky="w")
ttk.Entry(operate_frame).grid(row=0, sticky="w", column=1, columnspan=2,padx=20)
ttk.Button(operate_frame,text="查询").grid(row=0, column=3,padx=20)
ttk.Button(operate_frame,text="新增",bootstyle="success", command=lambda: open_form_window("新增")).grid(row=0, column=4,padx=20)
ttk.Button(operate_frame,text="删除",bootstyle="danger",command=delete_data).grid(row=0, column=5,padx=20)
ttk.Button(operate_frame,text="修改",bootstyle="info",command=edit_data).grid(row=0, column=6)

# 1,frame布局包裹
# 2,实例化控件,设置表头样式和标题文本
table_frame = tk.Frame(root, bg="gray", bd=5)
table_frame.grid(row=1, column=0)
columns = (0, 1, 2, 3, 4, 5)
headers = ("ID", "姓名", "学号", "年龄","班级","创建时间")
width_es = ( 60,   200,   80,   80 ,   200   ,   200   )
tv = ttk.Treeview(
    master=table_frame,
    columns=columns,
    show=HEADINGS,
    bootstyle="primary",
    height=15
)
for (column, header, width) in zip(columns, headers, width_es):
    tv.column(column, width=width, anchor="w")
    tv.heading(column, text=header, anchor="w")
tv.grid(row=0, column=0, sticky="nsew")

# 设置窗口的布局
root.grid_columnconfigure(0, weight=1)

init_data()
root.mainloop()

运行和测试

  • 说明如何启动程序。
  • 进行功能测试,确保每个部分正常工作。

结尾

本教程提供了一个完整的指南,用于创建一个基本的学生信息管理系统GUI。通过本教程,读者将能够理解如何使用Python的Tkinter和ttkbootstrap库来设计和实现一个功能性的桌面应用程序。

  • 24
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

usp1994

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

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

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

打赏作者

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

抵扣说明:

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

余额充值