目录
一、打开数据库表
1. 写打开数据库的槽函数
在qt上的actOpenDB这个action上点击右键,选择转到槽
选择triggered信号
复制函数名
在myMainWindow.py中添加函数
2. 运行后发现数据库可以打开了
3. ODBC配通了,数据库还是打不开
如果ODBC配通了,数据库还是打不开,可以考虑将连接串里面的localhost换成
(1)127.0.0.1
(2)主机名
4. 写在tableView上显示数据库表的函数
添加相应的import模块
5. 运行后发现表可以显示了
虽然很难看
6. 代码分析
self.DB是连接上的数据库
tableModel是PyQt5预定义的数据模型,用来作为数据库中一个数据库表的数据模型。
PyQt5使用Model/View结构来处理界面与数据。
Model从源数据提取需要的数据,用于视图组件进行显示和编辑
7. 添加列名称
插入红框中的代码
运行后可以看到表头信息出来了
8. 根据内容调整列宽
列太宽了,很难看。加多这条语句
输出结果好看多了
9. 备注:数据库连接串
也可以这么写
二、建立tableview与右侧组件的关联
1. 当前无关联
当前tableview里面选择某个行,右侧是无反应的
2. 添加关联代码
同时import若干新模块
插入
3. 运行程序
发现右边groupbox出现第一条数据。无论左边tableview点哪个单元格,右边的groupbox都不跟着变化
4. 添加选择行变化的信号与槽函数
5. 运行程序
换个地方点击
6. 发现tableView可以选择多行
按住Ctrl键,在多条记录上选择,发现可以选多行
7. 添加代码,限制tableView
在__init__函数中限制
8. 运行程序,发现没法选多行了
三、排序
1. 排序下拉框没内容
当前这个下拉框里面是没东西的,运行的时候点没反应
2. 补充相关函数和调用
3. 运行程序,发现排序下拉框有内容了
4. 排序下拉框的信号与槽
5. 添加槽函数
import新模块
添加红色框框内代码。注意要在前面写上@pyqtSlot(int),说明其参数为int类型
6. 运行程序
换一种排序方式
7. 升序和降序两个单选按钮的信号与槽函数
升序
降序
8. 添加槽函数
9. 运行测试升序降序功能
四、数据过滤
1. 添加槽函数
2. 测试过滤功能
3. 发现bug
原因是这些按钮在数据库没打开时不应该能按。排序相关功能也有类似的错误
4. 去Qt修改
将groupBoxSort的enabled属性里面的勾去掉
同样,将groupBoxFilter的相关属性也去掉
保存,退出qt
在Eric6工程目录下运行批处理文件或者将form文件拷贝到Eric6工程目录,然后在Eric6下编译form(因为改动没有涉及资源,所以直接在eric6下编译form就行了)
5. 运行程序
现在数据库没打开时,排序和过滤相应按钮都没法按了
6. 添加代码,让数据库打开时,排序和过滤功能能用
在opentable函数的最后加入如下代码
7. 运行程序
打开数据库以后,排序和过滤按钮能用了
五、工具按钮状态
1. 当前工具按钮状态
打开数据库后,打开按钮不应该还能用,不能多次重复打开数据库。而添加、插入、删除、涨工资、保存、修改等按钮应该变成有效状态,可以让人点击才对
2. 添加改变按钮状态的代码
3. 运行程序
数据库打开后,添加、插入、删除、涨工资相关按钮能按了。保存和取消按钮现在还不能按,改了数据后才能按。
六、涨工资按钮
1. 涨工资代码
2. 去数据库查一下原始数据
3. 运行程序
按涨工资键前
按涨工资键后
都涨了10%
4. 去数据库查一下现在的数据
数据全改了
5. 代码分析
七、删除、保存、取消按钮
1. 删除按钮代码
2. 运行程序
点完后,界面变成了这样
3. 去数据库里面查,发现数据还在
为什么没删掉,没有submit
4. 添加保存和取消代码
5. 运行程序
点删除后,发现这两个按钮还是不能按
当前鼠标换别的数据行试试
6. 添加模型相关代码
在opentable函数这里,添加一行
补充槽函数
7. 测试取消按钮
删除完之后,换别的单元格,发现保存和取消按钮可以用了。这是因为触发了do_currentChanged
先点取消按钮
点完后
到底删掉没有?点一下全显示按钮
数据回来了,取消删除成功
去数据库里面查一查,数据还在
8. 测试保存按钮
删除华筝的记录后,点保存按钮
输出
去数据库里查一查
八、数据的修改
1. 修改前数据
2. 修改数据
将黄蓉的工资改为200,出生日期改为4月29日,备注也改一下
点完后
按一下取消键,数据行变回原样
再改一次,这次按保存键
查询数据库,发现数据被改了
改一下黄蓉的性别和省份,按保存
数据库里查查,改掉了
![]()
九、tableview里数据的修改
1. bug
在右边的groupbox里的数据修改没问题,在左边的tableview里面修改就有问题
弹出修改框,随便乱改,变成下面的样子
按保存,去数据库里面查,发现已经把性别改成了不合理的数据X
在右侧的groupbox里,由于限制了性别只能去男和女,所以显示不出来X
要解决这个问题,要对tableview里面数据的修改进行限制
2. 自定义代理组件
tableview默认的单元格编辑组件是QlineEdit,对输入的数据无法限制。可以为某列设置自定义代理组件,比如QcommoBox。在上面的bug中,希望把性别的编辑组件改成QcommoBox,只能选择某些项(比如男和女),而不能随便输入。
新建文件myDelegates.py,创建一个
3. 修改代码,添加自定义组件
在opentable函数中插入红色框框中的代码
4. 运行程序,发现tableview里面的变化
十、添加和插入按钮
1. 添加代码
import模块
插入红色框框部分代码
2. 测试添加功能
查数据库,新记录出现了
3. 测试插入功能
查查数据库,新纪录出现。数据库语句没有排序字段,所以新纪录出现在最后
转载:https://blog.csdn.net/qq_53317005/article/details/129007709