飞道的博客

PyQt5数据库开发1 4.3 QSqlTableModel 之 相关槽函数的实现(多图长文详解)

553人阅读  评论(0)

目录

一、打开数据库表

1. 写打开数据库的槽函数

2. 运行后发现数据库可以打开了

3. ODBC配通了,数据库还是打不开

4. 写在tableView上显示数据库表的函数

5. 运行后发现表可以显示了

6. 代码分析

7. 添加列名称

8. 根据内容调整列宽

9. 备注:数据库连接串

二、建立tableview与右侧组件的关联

1. 当前无关联

2. 添加关联代码

3. 运行程序

4. 添加选择行变化的信号与槽函数 

5. 运行程序 

6. 发现tableView可以选择多行

7. 添加代码,限制tableView

8. 运行程序,发现没法选多行了

三、排序

1. 排序下拉框没内容

2. 补充相关函数和调用 

3. 运行程序,发现排序下拉框有内容了 

4. 排序下拉框的信号与槽 

5. 添加槽函数

6. 运行程序 

7. 升序和降序两个单选按钮的信号与槽函数 

8. 添加槽函数 

9. 运行测试升序降序功能

四、数据过滤

1. 添加槽函数

2. 测试过滤功能 

3. 发现bug 

4. 去Qt修改 

5. 运行程序

6. 添加代码,让数据库打开时,排序和过滤功能能用

7. 运行程序

五、工具按钮状态

1. 当前工具按钮状态

2. 添加改变按钮状态的代码 

3. 运行程序

六、涨工资按钮

1. 涨工资代码

2. 去数据库查一下原始数据 

3. 运行程序

4. 去数据库查一下现在的数据

5. 代码分析

七、删除、保存、取消按钮

1. 删除按钮代码

2. 运行程序 

3. 去数据库里面查,发现数据还在 

4. 添加保存和取消代码

5. 运行程序 

6. 添加模型相关代码

7. 测试取消按钮

8. 测试保存按钮

八、数据的修改

1. 修改前数据

2. 修改数据

九、tableview里数据的修改

1. bug

2. 自定义代理组件

3. 修改代码,添加自定义组件

4. 运行程序,发现tableview里面的变化 

十、添加和插入按钮

1. 添加代码

2. 测试添加功能 

3. 测试插入功能


一、打开数据库表

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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场