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

本文涉及的产品
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
实时计算 Flink 版,5000CU*H 3个月
简介: 使用`ttkbootstrap`构建的GUI学生信息管理系统,展示学生数据的`Treeview`,支持添加、编辑和删除记录。核心功能包括:- `Treeview`展示学生信息。- 表单窗口添加和编辑信息,利用`open_form_window`处理交互。- 选择项后,`edit_data`和`delete_data`分别用于编辑和删除。- 需要Python 3.8+和ttkbootstrap 1.10.1。- 源码展示了数据结构、事件处理和窗口布局。要运行,安装依赖并执行代码,测试各项功能以确保正常工作。

【附源码】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库来设计和实现一个功能性的桌面应用程序。

目录
相关文章
|
1天前
|
数据库 数据安全/隐私保护 Python
使用wxpython开发跨平台桌面应用,设计系统的登录界面
【11月更文挑战第12天】本文介绍了使用wxPython开发的简单跨平台桌面应用登录界面的示例代码。主要包括导入wxPython模块,创建登录界面类`LoginFrame`,定义界面布局与事件处理,以及启动应用程序的步骤。示例中实现了用户名和密码输入框及登录按钮的基本功能。
|
3月前
|
数据安全/隐私保护
【qt】考试系统项目
【qt】考试系统项目
37 0
|
5月前
第2个Qt项目:学生信息管理系统
第2个Qt项目:学生信息管理系统
|
5月前
|
前端开发 Java 数据库连接
基于SSM+Bootstrap【爱校教务系统管理系统】附源码
基于SSM+Bootstrap【爱校教务系统管理系统】附源码
26 0
|
6月前
|
数据库 C++
基于Qt的简易图书管理系统设计与实现
基于Qt的简易图书管理系统设计与实现
307 3
|
6月前
|
算法 C#
C#制作图书管理系统
C#制作图书管理系统
94 2
|
6月前
|
Java
图书管理系统(图文详解,附源码)
图书管理系统(图文详解,附源码)
1419 0
|
搜索推荐 数据可视化 安全
Python 基于微博舆情分析系统的设计与实现,GUI可视化界面(毕业设计,附源码,教程)
Python 基于微博舆情分析系统的设计与实现,GUI可视化界面(毕业设计,附源码,教程)
|
JSON 数据格式 Python
使用python开发天气预报程序(带gui)
使用python开发天气预报程序(带gui)
183 0