本系列将不定期分享原创Python实用项目,包含完整代码及实现说明,涵盖多种应用场景。如果你是刚学完语法却不知如何实践的新手,或想拓展项目经验的中级开发者,这里或许能为你提供灵感和参考模板。欢迎评论区或私信交流讨论,代码与思路皆可复用,一起精进技术。
一、项目全景速览 🌐
1. 一句话定位
用ttkbootstrap构建高颜值Python桌面应用:从零开发SQLite驱动的学生管理系统,涵盖班级管理、数据导入导出等完整功能链,代码即学即用。
2. 技术栈清单
- 核心库:ttkbootstrap 界面开发 / Peewee 数据库开发
- 辅助工具:pandas Excel导入 / openpyxl Excel导出
- 开发环境:Python3.8(过高版本安装ttkbootstrap可能会有问题,这个是我在开发过程中遇到的,版本过高,无法正常使用。如果你的Python版本安装使用没有问题,请忽略。) / VSCode等。
3. 功能地图
📂 项目架构
├── 班级与学生综合管理模块:实现班级管理和学生管理
└── 学生信息全量查询模块:提供对全部学生数据进行查询的功能
4. 功能模块说明
班级与学生综合管理
采用上下分区式GUI布局,精准实现班级-学生的层级化管理:
1. 🏫 班级管理区(上侧)
- 核心功能:班级的创建/编辑/删除
- 数据展示:ttkbootstrap表格控件实时渲染班级列表
- 操作反馈:SQLite数据库持久化存储,变更即时生效
2. 👨🎓 学生管理区(下侧)
- 单条操作:添加/修改/删除学生
- 批量处理:Excel导入导出(导入基于Pandas实现,导出基于openpyxl实现)
- 交互约束:
⚠️ 级联设计原则: 必须先选中目标班级,才能激活该区域功能控件 例如:选中「计算机2班」后,表格仅显示该班级学生,且所有操作均绑定班级ID |
学生信息全量查询
基于SQLite全文搜索与ttkbootstrap动态表格开发,突破单班级查询限制,实现全维度数据穿透。
二、部分项目代码展示🧪
创建数据模型,程序运行会自动创建与模型对应的数据库表。
import datetime
from peewee import *
db = SqliteDatabase("database.db")
class BaseModel(Model):
# 主键id
id=AutoField()
# 创建时间
created_time = DateTimeField(default=datetime.datetime.now)
class Meta:
database = db
# 班级
class Clazz(BaseModel):
def __init__(self, id: int=None, name: str=None, *args, **kwargs):
super().__init__(*args, **kwargs)
self.name = name
self.id = id
# 班级名称
name = CharField(max_length=50)
# 班级人数
number = IntegerField(default=0)
# 学生
class Student(BaseModel):
def __init__(self, id: int=None, stuno: str=None, name: str=None, clazzid: int=None, clazzname: str=None,
birth: str=None, gender: str=None, phone: str=None, *args, **kwargs):
super().__init__(*args, **kwargs)
self.id = id
self.stuno = stuno
self.name = name
self.clazzid = clazzid
self.clazzname = clazzname
self.birth = birth
self.gender = gender
self.phone = phone
# 学号
stuno = CharField(max_length=20, null=True)
# 姓名
name = CharField(max_length=20)
# 班级id
clazzid = IntegerField(null=True)
# 班级名称
clazzname = CharField(max_length=50, null=True)
# 出生日期
birth = DateField(null=True)
# 性别
gender = FixedCharField(max_length=1, null=True)
# 联系方式
phone = CharField(max_length=15, null=True)
# 创建数据库表
db.create_tables([Clazz, Student])
导出Excel方法。
from ttkbootstrap.dialogs.dialogs import Messagebox
from openpyxl import Workbook
def export_excel(headers: list, data: list, file_path: str):
""" 导出Excel,参数说明:
headers (list):Excel表头
data (list):导出数据
file_path (str):Excel文件路径
"""
# 创建一个工作簿对象
workbook = Workbook()
# 获取活动工作表
sheet = workbook.active
# 定义表头
sheet.append(headers)
# 将数据逐行添加到工作表中
for row in data:
sheet.append(row)
# 保存工作簿
try:
workbook.save(file_path)
Messagebox.ok("数据导出完成", title="消息")
except Exception as e:
Messagebox.show_error("数据导出出错,请稍后重试", title="提示")
三、源码获取
项目地址:Python-Open-Projects: 本仓库是Python开源项目的集合,适用于个人学习
欢迎关注我的公众号