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

目录

一、打开数据库表

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上点击右键,选择转到槽

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

选择triggered信号 

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

复制函数名 

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

在myMainWindow.py中添加函数 

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

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

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

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

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

如果ODBC配通了,数据库还是打不开,可以考虑将连接串里面的localhost换成

(1)127.0.0.1

(2)主机名

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

添加相应的import模块

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

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

虽然很难看

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

6. 代码分析

self.DB是连接上的数据库

 

tableModel是PyQt5预定义的数据模型,用来作为数据库中一个数据库表的数据模型。 

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

PyQt5使用Model/View结构来处理界面与数据。

Model从源数据提取需要的数据,用于视图组件进行显示和编辑

7. 添加列名称

插入红框中的代码

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

 运行后可以看到表头信息出来了

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

8. 根据内容调整列宽

列太宽了,很难看。加多这条语句

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

输出结果好看多了 

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

9. 备注:数据库连接串

也可以这么写

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

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

1. 当前无关联

当前tableview里面选择某个行,右侧是无反应的

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

2. 添加关联代码

同时import若干新模块

  

插入

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

3. 运行程序

发现右边groupbox出现第一条数据。无论左边tableview点哪个单元格,右边的groupbox都不跟着变化

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

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

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

5. 运行程序 

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

换个地方点击 

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

6. 发现tableView可以选择多行

按住Ctrl键,在多条记录上选择,发现可以选多行

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

7. 添加代码,限制tableView

在__init__函数中限制

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

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

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

三、排序

1. 排序下拉框没内容

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

当前这个下拉框里面是没东西的,运行的时候点没反应 

2. 补充相关函数和调用 

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

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

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

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

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

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

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

5. 添加槽函数

import新模块

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

添加红色框框内代码。注意要在前面写上@pyqtSlot(int),说明其参数为int类型

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

6. 运行程序 

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

换一种排序方式 

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

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

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

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

升序

降序 

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

8. 添加槽函数 

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

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

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

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

四、数据过滤

1. 添加槽函数

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

2. 测试过滤功能 

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

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

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

3. 发现bug 

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

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

原因是这些按钮在数据库没打开时不应该能按。排序相关功能也有类似的错误 

4. 去Qt修改 

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

将groupBoxSort的enabled属性里面的勾去掉 

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

同样,将groupBoxFilter的相关属性也去掉 

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

保存,退出qt 

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

 在Eric6工程目录下运行批处理文件或者将form文件拷贝到Eric6工程目录,然后在Eric6下编译form(因为改动没有涉及资源,所以直接在eric6下编译form就行了) 

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

5. 运行程序

现在数据库没打开时,排序和过滤相应按钮都没法按了

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

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

在opentable函数的最后加入如下代码

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

7. 运行程序

打开数据库以后,排序和过滤按钮能用了

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

五、工具按钮状态

1. 当前工具按钮状态

打开数据库后,打开按钮不应该还能用,不能多次重复打开数据库。而添加、插入、删除、涨工资、保存、修改等按钮应该变成有效状态,可以让人点击才对

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

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

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

3. 运行程序

数据库打开后,添加、插入、删除、涨工资相关按钮能按了。保存和取消按钮现在还不能按,改了数据后才能按。

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

六、涨工资按钮

1. 涨工资代码

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

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

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

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

3. 运行程序

按涨工资键前

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

按涨工资键后 

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

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

都涨了10%

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

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

数据全改了

5. 代码分析

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

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

1. 删除按钮代码

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

2. 运行程序 

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

点完后,界面变成了这样 

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

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

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

为什么没删掉,没有submit

4. 添加保存和取消代码

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

5. 运行程序 

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

点删除后,发现这两个按钮还是不能按 

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

当前鼠标换别的数据行试试 

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

6. 添加模型相关代码

在opentable函数这里,添加一行

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

补充槽函数 

7. 测试取消按钮

删除完之后,换别的单元格,发现保存和取消按钮可以用了。这是因为触发了do_currentChanged

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

先点取消按钮 

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

点完后 

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

到底删掉没有?点一下全显示按钮 

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

数据回来了,取消删除成功

去数据库里面查一查,数据还在 

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

8. 测试保存按钮

删除华筝的记录后,点保存按钮

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

 输出

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

 去数据库里查一查 

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

八、数据的修改

1. 修改前数据

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

2. 修改数据

将黄蓉的工资改为200,出生日期改为4月29日,备注也改一下

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

点完后  PyQt5数据库开发1 4.3 QSqlTableModel 之 相关槽函数的实现(多图长文详解)_第84张图片

按一下取消键,数据行变回原样

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

 再改一次,这次按保存键

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

查询数据库,发现数据被改了

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

改一下黄蓉的性别和省份,按保存

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

数据库里查查,改掉了

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

九、tableview里数据的修改

1. bug

在右边的groupbox里的数据修改没问题,在左边的tableview里面修改就有问题

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

弹出修改框,随便乱改,变成下面的样子 

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

按保存,去数据库里面查,发现已经把性别改成了不合理的数据X 

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

在右侧的groupbox里,由于限制了性别只能去男和女,所以显示不出来X

要解决这个问题,要对tableview里面数据的修改进行限制

2. 自定义代理组件

tableview默认的单元格编辑组件是QlineEdit,对输入的数据无法限制。可以为某列设置自定义代理组件,比如QcommoBox。在上面的bug中,希望把性别的编辑组件改成QcommoBox,只能选择某些项(比如男和女),而不能随便输入。

新建文件myDelegates.py,创建一个

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

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

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

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

在opentable函数中插入红色框框中的代码

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

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

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

十、添加和插入按钮

1. 添加代码

import模块

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

插入红色框框部分代码

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

2. 测试添加功能 

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

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

查数据库,新记录出现了 

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

3. 测试插入功能

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

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

查查数据库,新纪录出现。数据库语句没有排序字段,所以新纪录出现在最后 

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

你可能感兴趣的:(Python,数据库,python,pyqt)