赞
踩
最近在学习GUI设计,分享做的一些小项目。
这篇文我们讲一下如何基于PyQt5和MySQL用Python制作简单的学生信息管理系统。
(由于内容比较多,我们分模块讲解。)
***添加博主vx(私信)获得源码和资源文件 ***
***不要要私信啦 博主在国外很忙 !!! 没时间看私信 ***
当我们着手开发一款软件,得先有软件架构的思路。
我们先用PM的视角去了解它:
1.系统架构
我们把整个系统分为5个模块,并列出了各个模块的需求。
2.产品使用流程图
整个系统的操作流程也直观地体现出来了。
(逻辑性和条理性比较清晰。)
开发环境及工具如下:
操作系统:Win 10
Python版本:Python 3.8.6
开发工具:PyCharm专业版、MySQL、Navicat、PyQt5
我们直接使用数据库可视化工具Navicat生成需要的表和视图。
数据库的设计就完成了,后续使用只需向数据库中导入相关数据即可。
我们定义一个open()函数用于连接数据库:
# 连接数据库连接
def open():
db = pymysql.connect(host='localhost', user='root', password='111111', database="db_student",charset="utf8")
return db
( 数据库信息根据个人修改。)
我们定义一个exec()函数用于数据库数据的增、删、改:
# 数据库数据的增、删、改操作
def exec(sql,values):
db=open()
cursor = db.cursor() # 使用cursor获取操作游标
try:
cursor.execute(sql,values) # 执行增、删、改的SQL语句
db.commit()
return 1
except:
db.rollback()
return 0
finally:
cursor.close()
db.close()
我们定义query()函数用于数据库数据带参数的精确查询:
# 带参数的精确查询
def query(sql,*keys):
db=open()
cursor = db.cursor()
cursor.execute(sql,keys) # 执行查询SQL语句
result = cursor.fetchall() # 记录查询结果
cursor.close()
db.close()
return result
我们定义query2()函数用于数据库数据不带参数的模糊查询:
# 不带参数的模糊查询
def query2(sql):
db=open()
cursor = db.cursor()
cursor.execute(sql) # 执行查询SQL语句
result = cursor.fetchall() # 记录查询结果
cursor.close()
db.close()
return result
用户信息界面UI设计图如下:
将.ui转为.py文件后,我们还要进行以下功能的添加:
此处我们要注意的一点:
Qt Designer设计窗口.ui转为.py时,默认继承的是object类,为了各个窗口可以相互调用,我们需要将继承类手动改为QMainWindow,并添加__init__方法。
class Ui_MainWindow(QMainWindow):
# 构造方法
def __init__(self):
super(Ui_MainWindow, self).__init__()
self.setWindowFlags(QtCore.Qt.MSWindowsFixedSizeDialogHint) # 只显示最小化和关闭按钮
self.setupUi(self) # 初始化窗体设置
我们定义query()函数和getItem()来实现。
# 查询用户信息,并显示在表格中 def query(self): self.tbUser.setRowCount(0) # 清空表格中的所有行 result = service.query("select * from tb_user") # 调用服务类中的公共方法执行查询语句 row = len(result) # 取得记录个数,用于设置表格的行数 self.tbUser.setRowCount(row) # 设置表格行数 self.tbUser.setColumnCount(2) # 设置表格列数 # 设置表格的标题名称 self.tbUser.setHorizontalHeaderLabels(['用户名称', '用户密码']) for i in range(row): # 遍历行 for j in range(self.tbUser.columnCount()): # 遍历列 data = QTableWidgetItem(str(result[i][j])) # 转换后可插入表格 self.tbUser.setItem(i, j, data) # 设置每个单元格的数据 # 获取选中的表格内容 def getItem(self, item): if item.column() == 0: # 如果单击的是第一列 self.select = item.text() # 获取单击的单元格文本 self.editName.setText(self.select) # 显示在用户名称文本框中
我们通过自定义add()、 edit()、delete()函数来实现。
# 添加用户信息 def add(self): userName = self.editName.text() # 记录输入的用户名 userPwd = self.editPwd.text() # 记录输入的用户密码 if userName != "" and userPwd != "": # 判断用户名和密码不为空 # 执行添加语句 result=service.exec("insert into tb_user(userName,userPwd) values (%s,%s)",(userName,userPwd)) if result>0: # 如果结果大于0,说明添加成功 self.query() # 在表格中显示最新数据 QMessageBox.information(None, '提示', '信息添加成功!', QMessageBox.Ok) else: QMessageBox.warning(None, '警告', '请输入数据后,再执行相关操作!', QMessageBox.Ok) # 修改用户信息 def edit(self): try: if self.select!="": # 判断是否选择了要修改的数据 userPwd = self.editPwd.text() # 记录修改的用户密码 if userPwd != "": # 判断密码不为空 # 执行修改操作 result=service.exec("update tb_user set userPwd= %s where userName=%s",(userPwd,self.select)) if result>0: # 如果结果大于0,说明修改成功 self.query() # 在表格中显示最新数据 QMessageBox.information(None, '提示', '信息修改成功!', QMessageBox.Ok) except: QMessageBox.warning(None, '警告', '请先选择要修改的数据!', QMessageBox.Ok) # 删除用户信息 def delete(self): try: if self.select!="": # 判断是否选择了要删除的数据 # 执行删除操作 result=service.exec("delete from tb_user where userName= %s",(self.select,)) if result>0: # 如果结果大于0,说明删除成功 self.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。