目录
一、打开数据库表
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



















