开发记录
创建项目
新建python项目, 环境选择新的venv环境
安装必要依赖
当前依赖为项目新增依赖, 后续可能会随开发进行更新
# 提供了与 Python 3.5 或更高版本兼容的 32 位或 64 位架构的 wheels
pip3 install PyQt5
# 要安装 Qt Designer 等开发工具以支持 PyQt5 wheels
pip3 install pyqt5-tools
# 安装链接mysql所需依赖
pip3 install pymysql
# 链接mysql时所用到的加密方式
pip3 install cryptography
# 美化包依赖, 拉取依赖时, 不能使用豆瓣源, 豆瓣源没有这个依赖
pip3 install qdarkstyle
如果直接使用官方镜像源出现安装失败的情况, 可以考虑国内的镜像源
# 清华源
pip3 install {package} -i https://pypi.tuna.tsinghua.edu.cn/simple
# 豆瓣源
pip3 install {package} -i https://pypi.douban.com/simple
安装依赖方式参考下图
设计UI
打开设计器路径 {项目路径}\venv\Lib\site-packages\qt5_applications\Qt\bin\designer.exe
设计以下UI文件
主窗口UI: sqlManger_ui.ui
新增记录模态框UI: addrowdialog_ui.ui
UI文件转成成Python文件
pyuic5 -x sqlManger_ui.ui -o sqlManger_ui.py
pyuic5 -x addrowdialog_ui.ui -o addrowdialog_ui.py
转换完成后会生成以下文件
新增记录时, 不同的表格数据不同, 因此需要动态加载模态框表单项,
技术点:setattr
与getattr
方法的使用
setattr(目标对象, 属性名, 属性值)
getattr(目标对象, 属性名, 属性值)
重构 addrowdialog_ui.py
下的 setupUi
retranslateUi
方法, 设置表单项时, 设置成由传入参数动态加载, 文件调整如下
各个功能点信号与槽函数建立链接
# 连接按钮
self.ui.connbut.clicked.connect(self.conn_database)
# 查询按钮
self.ui.querybut.clicked.connect(self.execute_query)
# 回滚按钮
self.ui.roolbackbut.clicked.connect(self.rollback_database)
# 提交按钮
self.ui.commitbut.clicked.connect(self.commit_database)
# 切换数据库选择
self.ui.database.currentIndexChanged.connect(self.change_database)
# 更改主题
self.ui.themeComboBox.currentIndexChanged.connect(self.change_theme)
# 右键表格, 展示菜单
self.ui.tableView.setContextMenuPolicy(Qt.CustomContextMenu)
self.ui.tableView.customContextMenuRequested.connect(self.display_table_menu)
mysql数据库的使用
下载mysql相关依赖
pip3 install mysql-connector-python
因为涉及到事务的回滚, 所以当前应用获取的数据库链接为单例, 代码如下
@staticmethod
def get_connection(self):
if Utils.connection is not None:
return Utils.connection
Utils.connection = pymysql.connect(
# 数据库主机名
host=self.ui.host.text(),
# 数据库端口号,默认为3306
port=int(self.ui.port.text()),
# 数据库用户名
user=self.ui.username.text(),
# 数据库密码
passwd=self.ui.pwd.text(),
# 字符编码
charset='utf8'
)
return Utils.connection
@staticmethod
def get_cursor():
if Utils.cursor is not None:
return Utils.cursor
else:
if Utils.connection is None:
Utils.connection = Utils.get_connection()
Utils.cursor = Utils.connection.cursor()
return Utils.cursor
else:
Utils.cursor = Utils.connection.cursor()
return Utils.cursor
事务的开启
开启时机: 与数据库建立链接之后
# 开启事务
cursor.execute("BEGIN")
事务的提交
提交时机: 点击提交按钮
Utils.get_connection(self).commit()
事务的回滚
回滚时机
Utils.get_connection(self).rollback()
增加美化包
原本的QT样式不怎么好看, 集成一下美化包
pip3 install qdarkstyle -i https://pypi.tuna.tsinghua.edu.cn/simple
安装插件时, 不能使用豆瓣源, 豆瓣源没有这个依赖
main.py 入口文件给实例设置浅色样式
app.setStyleSheet(qdarkstyle.load_stylesheet(qt_api='pyqt5', palette=LightPalette()))
切换主题样式的实现
监控下拉框数据改变的信号, 链接对应的槽函数
# 为主题切换的信号和槽函数简历链接
self.ui.themeComboBox.currentIndexChanged.connect(self.change_theme)
切换主题的方法实现, 与启动项目时需要添加一步获取应用实例的操作Utils.get_app_self()
def change_theme(self):
if self.ui.themeComboBox.currentText() == "Dark":
Utils.get_app_self().setStyleSheet(qdarkstyle.load_stylesheet(qt_api='pyqt5', palette=DarkPalette()))
else:
Utils.get_app_self().setStyleSheet(qdarkstyle.load_stylesheet(qt_api='pyqt5', palette=LightPalette()))
qt-material 有更丰富的样式
pip install qt-material
应用样式
# 动态加载qt-material主题
import site
# venv/Lib/site-packages/qt_material/themes 读取该路径下的文件名
site_packages_path = site.getsitepackages()[1]
# self.ui.themeComboBox.addItems("")
# venv/Lib/site-packages/qt_material/themes 读取该路径下的文件名
apply_stylesheet(app, theme='light_blue_500.xml')
新增窗口增加滚动条
参考资料Qt designer + ScrollArea 实现滚动界面_qt designer scrollarea-CSDN博客
虚拟环境venv同步
参考资料: python 项目自动生成环境配置文件requirements.txt_如何生成requirements.txt-CSDN博客
生成requirements.txt文件
pip freeze > requirements.txt
安装依赖,根据requirements.txt
pip install -r requirements.txt
异常问题记录
QSqlDatabase无法加载MYSQL驱动(未解决)
问题现象
QSqlDatabase 无法链接MYSQL数据库, 提示无法加载驱动问题
参考资料:
问题原因:
最新版本的QT缺失MYSQL驱动的相关文件
解决方案
根据以上的参考文章操作后问题也没有解决, 最后该问题选择通过pymysql链接数据库, 获取数据, 使用标准的modle来展示
获取MYSQL数据库链接报加密异常(已解决)
问题现象
链接MYSQL在密码, 端口等信息均正确的情况下, 报如下异常
参考资料
运行项目
项目基础环境
已安装Python3, 可使用以下版本查看python版本
python -V
已安装MySql8.0及以上版本
mysql --help
拉取项目
首先从GITHUB拉取项目, GIT命令行或者下图方式均可
项目地址: https://github.com/lei-ctyh/sqlManger.git
配置项目解释器
按照自己需求配置项目解释器即可
ctrl
+alt
+s
进入设置 , 具体操作如下图
安装依赖
安装依赖,根据requirements.txt
pip install -r requirements.txt