SQL Server + Python Tkinter 数据库课程设计实战指南
简介基于SQL Server与Python Tkinter的数据库课程设计完整项目面向高校数据库原理、Python编程等课程的学生也适合需要快速搭建桌面销售管理系统的开发者。项目以销售业务为场景完整覆盖从需求分析、数据库建模、表结构设计到增删改查、GUI界面交互、exe打包发布的核心流程能有效解决课程设计从零起步耗时、缺乏完整参考的问题。压缩包共22个文件约20.75MB包含1800余行Python源码、可直接运行的销售管理系统exe、SQL Server数据库备份、20余页设计报告docx、6张系统界面截图以及若干配置与版本文档其中exe免环境配置即可运行docx报告和txt源码则便于深入解读。已有2652人学习下载参考价值经过实际验证。通过阅读代码和文档可重点掌握pymssql连接SQL Server、参数化查询、Tkinter页面布局与事件绑定也能学习数据库脚本还原和独立程序打包等工程细节是一份理论与实践结合紧密的课程设计范例。1. 用 SQL Server 加 Python Tkinter 做数据库课程设计数据流理顺了界面只是时间问题用 SQL Server 配 Python Tkinter 做数据库课程设计是个看着简单、做起来全是边角料的组合。很多人拿到题目就打开编辑器拖控件等界面画完才发现表结构没想好、连接串写错、刷新后选错记录每一处都能卡半天。这里拆的这套课程设计目标是做一套桌面端数据管理程序SQL Server 存数据Tkinter 画登录窗和主界面中间用 pyodbc 连库所有增删改查都走参数化查询。适合三类人需要交一份能演示课程设计的高校学生想把桌面 GUI 和数据库联调彻底搞懂的入门开发者以及想拿一套完整模板改结构、不想从零排错的人。拿到这份资源后不用追求读懂每一行先把第 2 章的建库脚本跑起来再改一个连接字符串就能看到登录窗。2. 环境与数据库设计把连接字符串和建表脚本一次配到能跑2.1 为什么选 SQL Server Tkinter而不是 Flask Web 或 Qt课程设计跟做产品是两码事。评委看的是你有没有把数据库设计、连接方式、异常处理讲清楚而不是界面多炫。SQL Server 在 Windows 环境下装个 Express 版就能用图形化工具成熟答辩时演示链路最顺。Tkinter 是 Python 标准库不需要额外装 GUI 框架代码结构透明适合短周期交付。有些同学一开始想用 Flask Web理由是“页面好看”。但 Web 方案要处理端口、浏览器路径、请求上下文数据库操作被埋得太深答辩时反而不容易把 SQL 逻辑讲明白。PyQt 功能更强但打包体积大、学习曲线陡课程设计里 Treeview、表单、对话框这几个控件 Tkinter 全覆盖了没必要提前上重型框架。我一般会建议如果老师没限定技术栈选你最有把握、当场能不翻车演示完的方案。这里拿“学生选课管理”当模拟项目X来做演示三张业务表加一张用户表是课程设计最常见的演示对象。你手里的题目换成图书管理、仓库管理、订单管理列名改一下就能套用。2.2 开发环境版本搭配先定环境否则后面所有报错都像玄学。比较稳的一套组合是组件推荐配置备注操作系统Windows 10/11演示环境兼容性最好Python3.10 或 3.11Tkinter 自带pyodbc 支持稳定SQL Server2019/2022 Express免费课程设计完全够用数据库连接驱动pyodbc走 ODBC报错容易查打包工具PyInstaller答辩现场演示用python --version pip install pyodbc第一条命令确认 Python 版本第二条装驱动。pyodbc 的安装本身很轻真正的问题出在 SQL Server 默认配置上。安装 SQL Server Express 时建议把身份验证模式改成“混合模式”也就是同时启用 SQL Server 身份验证和 Windows 身份验证并记下 sa 密码。这一步很多人跳过后面会花两小时在连接字符串上纠结。装完后先做一件重要的事打开“SQL Server 配置管理器”展开“SQL Server 网络配置”找到你自己的实例。如果实例名是SQLEXPRESS就展开“SQLEXPRESS 的协议”把 TCP/IP 从禁用改成启用。然后双击 TCP/IP在“IP 地址”标签页里把端口填成 1433。最后到“SQL Server 服务”里重启这个实例。TCP/IP 默认关闭是连接超时最常见的根因和防火墙没关系。注意连接字符串里写localhost不等于一定能走 TCP/IP。实例名没写对时ODBC 驱动会绕去命名管道机器就在旁边也照样超时。2.3 建表脚本与初始数据下面这段是初始化脚本里最核心的部分。我把 DDL 和种子数据分开写方便你反复重跑而不破坏已有数据。USE master; GO IF DB_ID(CourseDB) IS NULL BEGIN CREATE DATABASE CourseDB; END; GO USE CourseDB; GO CREATE TABLE AppUser ( UserID INT IDENTITY(1,1) PRIMARY KEY, UserName NVARCHAR(50) NOT NULL UNIQUE, Password NVARCHAR(100) NOT NULL ); CREATE TABLE Student ( StudentID NVARCHAR(20) PRIMARY KEY, Name NVARCHAR(50) NOT NULL, Dept NVARCHAR(50) NULL ); CREATE TABLE Course ( CourseID NVARCHAR(20) PRIMARY KEY, Title NVARCHAR(100) NOT NULL, Credit INT CHECK (Credit 0) ); CREATE TABLE Enroll ( EnrollID INT IDENTITY(1,1) PRIMARY KEY, StudentID NVARCHAR(20) NOT NULL, CourseID NVARCHAR(20) NOT NULL, EnrollDate DATETIME DEFAULT GETDATE(), CONSTRAINT FK_Enroll_Student FOREIGN KEY (StudentID) REFERENCES Student(StudentID), CONSTRAINT FK_Enroll_Course FOREIGN KEY (CourseID) REFERENCES Course(CourseID) ); INSERT INTO AppUser (UserName, Password) VALUES (NA同学, N123456); INSERT INTO Student (StudentID, Name, Dept) VALUES (N2025001, NA同学, N计算机系), (N2025002, NB同学, N软件工程系); INSERT INTO Course (CourseID, Title, Credit) VALUES (NC001, N数据库原理, 4), (NC002, NPython 程序设计, 3);这段脚本里有几个关键点。第一所有字符串列都用NVARCHAR而不是VARCHAR配合N内容这样的字面量写法能从源头避开中文乱码。第二Enroll表用IDENTITY自增列做主键而不是用StudentID CourseID复合主键。学生退课后重新选课自增列不会污染主键。第三外键约束放在Enroll表里数据库层面就能拦住“选了不存在的课程”这种非法数据。种子数据只插了两名学生和两门课够你验证登录、列表和选课功能。AppUser表里的密码是明文课程设计答辩时建议在代码注释里专门写一句“生产环境必须用哈希”演示逻辑即可。3. 数据访问层用 pyodbc 还是 pymssql决定你未来几小时的心情3.1 先分清楚 pyodbc 和 pymssql写数据访问层之前先别急着敲代码把驱动选明白。常见选择有两个pyodbc 和 pymssql。pyodbc 走 ODBC官方文档多连接字符串的写法固定报错信息比较常见pymssql 直接走 TDS 协议安装简单但维护节奏慢个别 Windows 环境下会出现 DLL 缺失。这套课程设计我选 pyodbc原因是后期打包时容易解释。你用 PyInstaller 打包出来的 exe只要目标机器装了对应的 ODBC Driver就能连库。pymssql 虽然打包体积小但驱动文件动不动就因为系统库版本对不上而沉默失败。对比项pyodbcpymssql连接方式通过 ODBC 驱动直接走 TDS 协议连接串标准 ODBC 格式参数独立常见问题驱动版本不匹配DLL 依赖问题打包后目标机器装 ODBC Driver 即可体积更小但环境敏感连接字符串里最常改的是这几个参数# config.py SERVER localhost,1433 DATABASE CourseDB USERNAME sa PASSWORD 你的密码SERVER里写成localhost,1433是刻意加端口的避免 ODBC 默认走命名管道。PASSWORD如果包含特殊字符建议先试一个纯字母密码确认链路通再加特殊字符不然会把连接串转义问题和网络问题混在一起。3.2 连接封装类数据访问层不要每个窗口都写一遍pyodbc.connect。我通常封装一个DbHelper功能控制在两个查询返回字典列表写入负责提交并返回影响行数。import pyodbc class DbHelper: def __init__(self, server, database, username, password): self.conn_str ( fDRIVER{{ODBC Driver 17 for SQL Server}}; fSERVER{server};DATABASE{database}; fUID{username};PWD{password}; CHARSETUTF8; ) # timeout 是给连接失败留的止损线防止 UI 卡死 self.conn pyodbc.connect(self.conn_str, timeout3) def query(self, sql, paramsNone): with self.conn.cursor() as cursor: cursor.execute(sql, params or ()) cols [col[0] for col in cursor.description] rows [dict(zip(cols, row)) for row in cursor.fetchall()] return rows def execute(self, sql, paramsNone): with self.conn.cursor() as cursor: cursor.execute(sql, params or ()) self.conn.commit() return cursor.rowcountquery里做了一步转换把游标结果转成list[dict]UI 层直接通过列名取值不用记位置下标。execute负责增删改并提交调用方不用关心commit()。这里有两个细节值得注意。第一个细节with self.conn.cursor()只负责关闭游标不会关闭连接。课程设计期间整个程序共用这个conn不要在每个按钮点击时新建连接。每点一次按钮连一次库答辩演示时会出现明显的卡顿而且数据库连接数会一路涨。第二个细节timeout3看起来不起眼但非常重要。没有它数据库没启动或者 IP 不通时connect()会默认等十几秒甚至更久登录窗口会直接变成“未响应”。加上它之后连接失败最迟 3 秒给出错误界面还能保持可控。3.3 参数化查询与事务边界数据访问层最容易翻车的点是把用户输入直接拼进 SQL。比如登录框输入 OR 11 --如果你的登录还能进说明代码里肯定在拼串。参数化查询后这条输入会被当成普通字符串值查不到任何用户自然登录失败。def login(db, username, password): sql SELECT UserID FROM AppUser WHERE UserName ? AND Password ? rows db.query(sql, (username, password)) return rows[0][UserID] if rows else None def enroll(db, student_id, course_id): try: db.execute( INSERT INTO Enroll (StudentID, CourseID) VALUES (?, ?), (student_id, course_id), ) return 选课成功 except pyodbc.IntegrityError: return 学号或课程号不存在?是 pyodbc 的参数占位符不管输入里带单引号、中文还是反转义字符都会被当作数据而不是 SQL 语句处理。课程设计答辩时老师最喜欢问“如果有人恶意输入怎么办”你只要展示这段代码再补一句“所有 SQL 都走参数化没有拼串”基本就过关了。如果需要在一个事务里做多步更新比如 A 同学退课后把名额转给 B 同学不要用DbHelper.execute分开执行因为每次execute里都 commit前一步成功就无法回滚。正确做法是手动控制同一个连接的事务边界conn db.conn # 同一个连接才能共用一个事务 try: cur conn.cursor() cur.execute(DELETE FROM Enroll WHERE StudentID ? AND CourseID ?, (student_a, C001)) cur.execute(INSERT INTO Enroll (StudentID, CourseID) VALUES (?, ?), (student_b, C001)) conn.commit() except Exception: conn.rollback() raisepyodbc 默认autocommitFalse所以事务边界完全可以自己控制。如果多步操作分散在不同的连接里rollback()也回不到已提交的那一步这个坑比较隐蔽。4. Tkinter 界面从登录窗口到主窗体代码按类组织不容易乱4.1 用类组织窗口而不是堆全局函数很多人的 Tkinter 代码最后会变成一个 500 行的单文件从main()开始一路 if 到底。表面看能跑但加一个“添加学生”窗口就会开始乱。我习惯用类来封装窗口每个窗口负责自己的控件和事件窗口之间通过db传递同一个连接对象。# main.py import tkinter as tk from tkinter import messagebox, ttk class LoginWindow: def __init__(self, db): self.db db self.root tk.Tk() self.root.title(学生选课管理 - 登录) frame ttk.Frame(self.root, padding20) frame.grid() ttk.Label(frame, text用户名).grid(row0, column0) self.username tk.StringVar() ttk.Entry(frame, textvariableself.username).grid(row0, column1) ttk.Button(frame, text登录, commandself.on_login).grid(row1, columnspan2) def on_login(self): name self.username.get().strip() if not name: messagebox.showwarning(提示, 请输入用户名) return # 这里先做本地校验再调数据层 user self.db.query( SELECT UserID FROM AppUser WHERE UserName ?, (name,), ) if user: self.root.destroy() MainWindow(self.db).run() else: messagebox.showerror(错误, 用户不存在)注意登录成功之后MainWindow(self.db).run()接收的是同一个db对象。这样做的好处是整个程序生命周期只建立一次数据库连接所有窗口共享数据访问层。如果每个窗口重新 new 一个DbHelper就会出现多连接、锁等待、事务错乱的问题。如果后续要改连接信息只需要改config.py不用去窗口类里挖。4.2 Treeview 显示与刷新机制主窗体里用得最多的是ttk.Treeview用来展示学生列表、课程列表、选课记录。这个控件本身不难难在刷新后不丢选中关系。class MainWindow: def __init__(self, db): self.db db self.root tk.Tk() self.tree ttk.Treeview( self.root, columns(name, dept), showheadings, ) self.tree.heading(name, text姓名) self.tree.heading(dept, text院系) self.tree.pack(fillboth, expandTrue) self.refresh() def refresh(self): # 从数据库拿最新数据先清空再插入 rows self.db.query(SELECT StudentID, Name, Dept FROM Student) self.tree.delete(*self.tree.get_children()) for row in rows: # 数据库主键存到 iid界面显示 name 和 dept self.tree.insert(, end, iidrow[StudentID], values(row[Name], row[Dept])) def run(self): self.root.mainloop()这里最有价值的做法是把数据库主键StudentID放到iid字段界面上只显示姓名和院系。iid是 Treeview 内部唯一标识你选中的行只要通过tree.selection()[0]拿到的就是主键。千万不要把姓名这种业务字段当唯一标识同名学生存在时刷新后删错记录是必然的。刷新函数里先delete(*self.tree.get_children())再重新插入是为了避免旧数据残留。如果数据量上百条这个操作毫无压力如果上万条建议考虑分页查询否则每次刷新都会把全表拖到界面上答辩时会明显卡一下。4.3 表单提交与校验新增学生、选课这类操作我一般用一个Toplevel弹窗输入框的组合只有两到三个控件。弹窗里最值得守住的规矩是提交动作先做前端校验再依赖数据库约束兜底。class AddStudentDialog(tk.Toplevel): def __init__(self, master, db, on_success): super().__init__(master) self.db db self.on_success on_success self.sid tk.StringVar() self.name tk.StringVar() ttk.Label(self, text学号).grid(row0, column0) ttk.Entry(self, textvariableself.sid).grid(row0, column1) ttk.Label(self, text姓名).grid(row1, column0) ttk.Entry(self, textvariableself.name).grid(row1, column1) ttk.Button(self, text保存, commandself.on_save).grid(row2, columnspan2) def on_save(self): sid self.sid.get().strip() name self.name.get().strip() # 前端只做空值校验业务规则交给数据库 if not sid or not name: messagebox.showwarning(提示, 学号和姓名不能为空) return try: self.db.execute( INSERT INTO Student (StudentID, Name) VALUES (?, ?), (sid, name), ) self.on_success() self.destroy() except pyodbc.IntegrityError: messagebox.showerror(错误, 学号已存在请检查输入)strip()用来把首尾空格去掉避免用户在输入框里不小心敲了空格让“空白”通过校验。空值判断放在 UI 层主键冲突判断交给数据库pyodbc.IntegrityError会被抛出来。如果你在弹窗里捕获后不提示用户会以为保存成功了刷新后却看不到新记录这是课程设计演示里最容易出现的“软件 bug 其实是没 catch 异常”的现象。5. 常见问题排查五个让课程设计当场翻车的坑课程设计能不能顺利答辩很多时候拼的不是功能多而是环境稳。这里整理五个我见过最高频的踩坑记录每一条都按现象、原因、解决三步骤说清楚。5.1 连不上 SQL Server报 08001 或者 timeout现象pyodbc.connect()抛出OperationalError: (08001, [Microsoft][ODBC Driver 17 for SQL Server]...)有时候还会提示Timeout expired。即使数据库就跟程序装在同一台电脑上照样超时。原因大多数情况下是 SQL Server 安装后 TCP/IP 默认关闭ODBC 驱动找不到 1433 端口。另一种常见原因是连接字符串里写了SERVERlocalhost没有跟着实例名或端口驱动走错协议。解决第一步打开“SQL Server 配置管理器”在“SQL Server 网络配置”里启用对应实例的 TCP/IP并在 IP 地址页确认端口为 1433。第二步重启 SQL Server 服务。第三步把连接串改成带端口的写法SERVERlocalhost,1433。最后可以用telnet 127.0.0.1 1433验证端口是否通。如果仍然失败打开 SQL Server Management Studio用 sa 账号登录一次确认账号没被禁用。密码错误和连接超时是两个完全不同的报错先把这两个分开再排查。5.2 中文乱码现象在 Tkinter 输入框里录入中文写进数据库后变成了?或者从数据库查出来显示在 Treeview 中是一串乱码。原因通常有两个原因叠加。第一建表时字符串列用了VARCHAR而不是NVARCHAR中文在编码转换时被截断。第二连接字符串里没有CHARSETUTF8pyodbc 用系统代码页去解释字节流两侧编码不一致显示自然乱。解决建表脚本里所有存中文的列全部改成NVARCHAR插入时用N中文字面量。连接字符串里加一项CHARSETUTF8。Python 3 的字符串本身就是 Unicode不要在代码里手动encode()Tkinter 控件拿到 str 就能正确显示。如果是从外部 CSV 或者旧 Access 库导入数据导入前先统一转成 UTF-8再走参数化插入。5.3 Treeview 刷新后选中项错位现象在列表里选中第二行点“删除”程序执行后删的是第三行或者双击某条记录弹出的编辑窗口里却显示别人的信息。原因代码用到的是tree.item(item, values)[0]这种取显示文本当主键的做法。一旦列表排序变化或出现两条同名学生记录显示值不再是唯一身份错位就发生了。解决把数据库主键存进 Treeview 的iid字段。插入时用iidrow[StudentID]删除时直接取tree.selection()[0]这个值就是当前选中行的主键。如果业务主键本身可能重复比如两个不同学期的选课关系就用自增的EnrollID作为 iid并在values里显示业务字段。这里的关键原则是界面上可以没有主键列但逻辑上必须有一个隐藏的唯一标识跟着行走。5.4 登录按钮点了没反应窗口像冻住现象点击“登录”后整个窗口标题栏变成“未响应”几秒后才恢复数据库越复杂卡得越明显。有时候会直接转圈答辩现场特别难看。原因on_login方法在 Tkinter 的 UI 线程里直接执行pyodbc.connect和查询。界面mainloop被数据库调用阻塞事件循环走不动窗口自然失去响应。解决把耗时的数据库操作放到子线程查询完成后用root.after回到主线程更新界面。def on_login(self): def work(): try: user self.db.query( SELECT UserID FROM AppUser WHERE UserName ?, (self.username.get().strip(),), ) self.root.after(0, self.after_login, user) except Exception as exc: self.root.after(0, self.show_error, str(exc)) threading.Thread(targetwork, daemonTrue).start() def after_login(self, user): if user: self.root.destroy() MainWindow(self.db).run() else: messagebox.showerror(错误, 用户不存在) def show_error(self, msg): messagebox.showerror(连接失败, msg)daemonTrue保证了主窗口关闭时子线程不会拖住进程不退。root.after(0, ...)会把结果更新动作交还给事件循环这样界面不会冻住。如果你的课程设计里没有多线程需求至少要把timeout3加上避免连接失败时卡十几秒。5.5 数据写不进去也没报错或者字符串里有引号就崩现象点“保存”后程序没有异常提示但刷新列表看不到新数据。另一种是输入OBrien这类带单引号的字符串数据库直接报语法错误。原因第一种情况是执行INSERT后忘了commit()。pyodbc 默认不会自动提交程序没报错只是因为execute()成功了但事务还在进行中刷新时数据当然看不到。第二种情况是同事或自己用了 f-string 拼 SQL单引号没有转义SQL 语句被切断。解决所有写操作统一走DbHelper.execute()在里面调用conn.commit()这样每个单条操作都不会漏提交。如果要跨多表做事务就用 3.3 里的手动commit()和rollback()。带引号的输入一定用参数化查询占位符?替你把引号隔离掉。排查时给execute()包一层 try/except打印 SQL 和参数但不要打印密码字段这样能快速定位是 SQL 写错了还是参数没传对。6. 收尾技巧把课程设计打包成演示版并强制自测三遍课程设计做到最后代码能跑还不够得保证答辩那天能现场跑通。我一般会做两件事用 PyInstaller 打包成 exe然后按固定清单自测三遍。pip install pyinstaller pyinstaller -w -F --name CourseTool main.py-w表示不显示控制台窗口-F表示打包成单个 exe。打包时会把你写的所有 Python 代码和一个轻量 Python 运行时装进去。但要注意这不会把 ODBC Driver 一起装进去。目标演示机器必须已经安装“ODBC Driver 17 for SQL Server”否则打包出来的 exe 一启动就在连接层报错界面都进不去。打包完成后我会新建一个空目录把 exe 单独复制进去模拟一台“刚装好环境”的机器然后按这个顺序测测试项操作预期结果建库脚本重新执行 init.sql不报错表结构完整登录正确账号、错误账号、空账号各一次提示符合预期中文录入新增一名带中文系别的学生列表显示不乱码刷新选中选中后删除再刷新删除的是选中的那条连续操作连续新增两条、修改一条、删除一条数据始终一致如果 exe 在空目录里能一遍跑通答辩基本就稳了。如果中途任何一步要调试回到源码环境跑一遍python main.py确认改的是代码而不是环境问题。从那以后我每次带数据库课程设计都强制自己在交付前走一遍这个清单先重跑建库脚本再用打包后的 exe 从头操作一轮。因为真正让项目翻车的从来不是 SQL 写不出来而是环境、编码和界面刷新这些边角料。希望这些经验能帮你少掉几根头发也祝你的课程设计一眼过。本文还有配套的精品资源点击获取

相关新闻

ProE基础特征建立全解析:拉伸旋转扫描混合与避坑指南

ProE基础特征建立全解析:拉伸旋转扫描混合与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 2:50:38 阅读更多 →
年终总结PPT模板怎么改?拆解pptx占位符、图表与字体替换全流程

年终总结PPT模板怎么改?拆解pptx占位符、图表与字体替换全流程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 2:50:38 阅读更多 →
LLC谐振变换器设计要点:从ZVS原理到调试避坑全解析

LLC谐振变换器设计要点:从ZVS原理到调试避坑全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 2:50:37 阅读更多 →

最新新闻

短线交易生存指南:模式内交易、仓位管理与止损铁律

短线交易生存指南:模式内交易、仓位管理与止损铁律

我不确定各位做短线交易多久了,但如果你在交易社区里泡过一阵,应该会发现一个特别直观的现象:晒收益截图的人换了一茬又一茬,今天还在涨停板上来回横跳的那位,第二年基本就没了声音。短线交易之所以是淘汰率最高的领域…

2026/10/12 6:25:44 阅读更多 →
Mongoose入门教程:用TaoToken统一Key打通Node.js与MongoDB开发链路

Mongoose入门教程:用TaoToken统一Key打通Node.js与MongoDB开发链路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 6:25:44 阅读更多 →
傅里叶算子结合SVM的手势识别源码详解与调参实战

傅里叶算子结合SVM的手势识别源码详解与调参实战

简介:面向手势识别与计算机视觉学习场景,这份完整源代码基于Python实现,并附带已构建好的样本库,适合机器学习初学者、课程设计或毕业设计者借鉴。代码运行于Win10 Python3.7环境,完整覆盖图像平滑、OTSU阈值肤色分割…

2026/10/12 6:25:44 阅读更多 →
CAMStoWRF完全指南:从CAMS数据下载到WRF-Chem初边界场配置

CAMStoWRF完全指南:从CAMS数据下载到WRF-Chem初边界场配置

做空气质量模拟的人应该都干过这件事:把全球化学模式的输出结果塞进WRF-Chem里当初始场和边界场。早些年大家满世界找MOZART的nc文件,后来慢慢有人开始用CAMS(哥白尼大气监测服务)的再分析数据。CAMS数据覆盖面广、化学物种相对齐…

2026/10/12 6:25:44 阅读更多 →
多角色管理与押金自动退:一站式租赁商城小程序源码系统解析

多角色管理与押金自动退:一站式租赁商城小程序源码系统解析

做租赁类小程序这几年,我见过太多项目死在同一个坑里:商品、支付都接好了,结果押金体系没设计好,客人退押金要催、商家扣款要吵、平台两边受气。今天聊的这套“多角色管理、押金自动退的一站式线上租赁商城小程序源码系统”&#…

2026/10/12 6:25:44 阅读更多 →
开源+私有化:打造能主动干活的企业AI工作伙伴

开源+私有化:打造能主动干活的企业AI工作伙伴

1. 从"只会聊天"到"能干活":企业AI落地的真实断层在哪过去两年,我参与过好几个企业内部的AI助手项目,几乎每一个都经历过同样的尴尬:上线第一周大家图新鲜,问天气、写周报、翻译邮件,用…

2026/10/12 6:24:44 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →