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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3225525.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

IPD流程验证阶段模板及表单

目录 简介 内容brief(部分截图) 作者简介 简介 前面几期分享了 IPD 开发流程中的, 概念、计划、开发阶段的相关资料。 今天就来分享一下验证阶段的资料及表单内容。 在 IPD 流程的这个阶段, 就不仅仅是测试功能的实现这么…

AD9361的0x05E寄存器的说明

AD9361的0x05E寄存器在配置过程中扮演着重要的角色,特别是在与基带锁相环(Base Band PLL, BB-PLL)的状态监测相关时。以下是对AD9361的0x05E寄存器的详细说明: 一、功能概述 AD9361的0x05E寄存器通常用于监测BB-PLL的状态&#…

【国产开源可视化引擎Meta2d.js】鹰眼地图

鹰眼地图 画布右下角弹出一个缩略导航地图,鼠标点击可以跳到指定位置。 在线体验: 乐吾乐2D可视化 示例: // 显示缩略地图 meta2d.showMap();// 关闭缩略地图 meta2d.hideMap();

多会话 Telnet 日志记录器

创建一个多会话 Telnet 日志记录器可以实现对多个 Telnet 会话进行连接、监控和记录日志。以下是一个基本的 Python 示例,使用 telnetlib 库来实现多会话 Telnet 日志记录器,并使用 threading 模块来处理多个会话。 1、问题背景 我们需要编写一个脚本&a…

合合信息大模型加速器重磅上线,释放智能文档全新可能

目录 0 写在前面1 高速文档解析引擎:拓宽大模型认知边界2 文本嵌入模型acge:克服大模型感知缺陷3 行业赋能:以百川智能为例总结 0 写在前面 随着人工智能技术的飞速发展,大模型以强大的数字处理能力和深度学习能力,不…

Spark RDD优化

Spark RDD优化 一、分区优化二、持久化优化三、依赖优化四、共享变量优化五、提交模式与运行模式优化六、其他优化 一、分区优化 分区数调整:RDD的分区数可以通过repartition和coalesce方法进行调整。合理的分区数可以提高并行度,但过多的分区会增加管…

数据库之DML

1,创建表 mysql> create table student(-> id int primary key,-> name varchar(20) not null,-> grade float-> );插入记录 mysql> insert into student values(1,monkey,98.5); Query OK, 1 row affected (0.01 sec)一次性插入多条记录 mysql…

Rti DDS qos

1. parent.allow_interfaces_list 字符串列表,每个字符串标识一系列接口地址或接口名称。接口必须指定为逗号分隔的字符串,每个逗号分隔一个接口。 例如,以下是可接受的字符串: 192.168.1.1 192.168.1.* 192.168.* 192.* e…

高速电吹风方案介绍,多档温度风速调节,转速可达105000RPM

高速电吹风是这几年很火的一种电动小家电,能够在较短时间内完成头发干燥,减少对头发的热损伤。可以通过高速电机和风扇来产生高速风流,迅速将头发表面的水分吹干。高速电吹风通常配有多种档位风速和温度可以设置,用户可以根据需要…

VS安装Qt扩展工具

1-Visual Studio中安装QT插件 **插件下载地址:**http://download.qt.io/development_releases/vsaddin/ 关闭VS,双击下载的QT插件,默认安装即可; (1)配置Qt的MSVC编译器安装路径 打开Visual Studio,在菜单栏…

CentOS 6.5配置国内在线yum源和制作openssh 9.8p1 rpm包 —— 筑梦之路

CentOS 6.5比较古老的版本了&#xff0c;而还是有一些古老的项目仍然在使用。 环境说明 1. 更换国内在线yum源 CentOS 6 在线可用yum源配置——筑梦之路_centos6可用yum源-CSDN博客 cat > CentOS-163.repo << EOF [base] nameCentOS-$releasever - Base - 163.com …

unity使用 MQTT复现plant simulate仿真

unity使用 MQTT复现plant simulate仿真 一、plant simulate端配置 1、plant simulate MQTT组件配置,该组件在类库的信息流类目下,端口不变,填写ip即可; 2、设备配置界面,在控件入口和出口处各挂一个脚本,当物料出入该设备时会分别触发执行这两个脚本,粘贴如下代码; E…

Windows 黑暗模式是什么意思?如何开启它?

随着计算机和移动设备的普及&#xff0c;长时间盯着屏幕已经成为现代人生活和工作的常态。为了减轻眼睛疲劳&#xff0c;并在低光环境中提供更舒适的视觉体验&#xff0c;许多操作系统和应用程序都引入了黑暗模式&#xff08;Dark Mode&#xff09;。 Windows 黑暗模式就是其中…

(补充):java各种进制和文本、图像、音频在计算机中的存储方式

文章目录 前言一、进制1 逢几进一2 常见进制在java中的表示3 进制中的转换(1)任意进制转十进制(2)十进制转其他进制二、计算机中的存储1 计算机的存储规则(文本数据)(1)ASCII码表(2)编码规则的发展演化2 计算机的存储规则(图片数据)(1)分辨率、像素(2)黑白图与灰度…

基于Java中的SSM框架实现疫情冷链追溯系统项目【项目源码+论文说明】

基于Java中的SSM框架实现疫情冷链追溯系统演示 摘要 近几年随着城镇化发展和居民消费水平的不断提升&#xff0c;人们对健康生活方式的追求意识逐渐加强&#xff0c;生鲜食品逐渐受到大众青睐&#xff0c;诸如盒马鲜生、7-fresh等品牌生鲜超市&#xff0c;一时间如雨后春笋般迅…

单片机中有FLASH为啥还需要EEROM?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; 一是EEPROM操作简单&…

matlab数值溢出该怎么解决?

&#x1f3c6;本文收录于《CSDN问答解惑》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&…

ssm华天计算机面试刷题系统-计算机毕业设计源码22543

摘 要 华天计算机面试刷题系统是一款基于SSM&#xff08;Spring、Spring MVC、MyBatis&#xff09;框架、利用Java编程语言和MySQL数据库&#xff0c;开发的在线学习和测试平台。系统利用SSM框架及前端开发技术&#xff0c;实现了模块化开发和管理&#xff0c;前后端交互以及数…

职业教育软件测试实验实训室建设应用案例

在信息化高速发展的今天&#xff0c;软件测试作为保障软件质量的关键环节&#xff0c;其重要性日益凸显。为满足职业教育对软件测试人才的培养需求&#xff0c;提高学生的实践能力和职业素养&#xff0c;唯众倾力打造了一款先进的软件测试实验实训室&#xff0c;并成功应用于多…

数据跨境传输法规日趋完善,企业如何规避合规风险?

随着全球化的发展&#xff0c;跨境数据传输变得日益频繁。在数字化时代&#xff0c;数据安全是企业运营的关键。数据跨境传输由于涉及不同国家和地区&#xff0c;其安全合规性面临着更大的风险和挑战。 2022年&#xff0c;国家网信办发布了《数据出境安全评估办法》&#xff08…