前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >PyQt5数据库开发1 4.3 QSqlTableModel 之 相关槽函数的实现(多图长文详解)

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

作者头像
会洗碗的CV工程师
发布于 2023-02-26 07:32:02
发布于 2023-02-26 07:32:02
2K0
举报
文章被收录于专栏:LongJava学习资料LongJava学习资料

目录

一、打开数据库表

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. 测试插入功能

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-02-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
PyQt5数据库开发1 4.3 QSqlTableModel④下部
发现右边groupbox出现第一条数据。无论左边tableview点哪个单元格,右边的groupbox都不跟着变化
会洗碗的CV工程师
2023/11/30
2180
PyQt5数据库开发1 4.3 QSqlTableModel④下部
PyQt5数据库开发3 6 QSqlQuery完整实操案例【图文详解】
目录 一、Qt主窗体设计 1. 新建Qt项目 2. 添加一个tableview  3. 添加资源  4. 添加Action  5. 修改Action的状态 6. 添加工具栏 7. 添加菜单  8. 实现按钮功能  二、Qt对话框窗体设计 1. 新建窗体 2. 拷贝组件 3. 放按钮 4. 调整布局 5. 为按钮设置图标  6. 实现按钮功能  三、窗体功能实现 1. 编译窗体文件和资源文件 2. 新建项目  3. 新建appMain.py文件  4. 新建myMainWindow.py文件  5. 新建my
会洗碗的CV工程师
2023/03/11
1.2K0
PyQt5数据库开发3 6 QSqlQuery完整实操案例【图文详解】
PyQt5数据库开发1 4.3 QSqlTableModel 之 Qt项目的创建
目录 一、新建Qt项目 1. 编辑资源文件 2. 添加前缀 3. 新建放资源文件的目录 4. 添加图标文件 二、Action 1. 新建打开数据库Action 2. 添加其他Action 三、工具栏 1. 添加工具栏 2. 拖动actOpenDB到工具栏 3. 设置工具栏属性 4. 添加分隔符 5. 添加其他工具 6. 工具栏层次结构  四、菜单 1. 添加文件分组 2. 添加其他文件分组下菜单项  3. 添加其他分组和菜单项 4. 菜单层次结构  五、关闭Action的实现 六、修改Action的状态 七
会洗碗的CV工程师
2023/02/26
6210
PyQt5数据库开发1 4.3 QSqlTableModel 之 Qt项目的创建
PyQt5数据库开发1 4.3 QSqlTableModel⑤
打开数据库后,打开按钮不应该还能用,不能多次重复打开数据库。而添加、插入、删除、涨工资、保存、修改等按钮应该变成有效状态,可以让人点击才对
会洗碗的CV工程师
2023/11/30
2080
PyQt5数据库开发1 4.3 QSqlTableModel⑤
PyQt5数据库开发2 5.1 QSqlQueryModel
目录 一、Qt窗体设计 1. 新建Qt项目 2. 拷贝4-3的部分组件过来 3. 添加资源文件  4. 创建Action 5. 添加工具栏 6. 创建菜单项  7. 关闭Action的实现 8. 调整布局 8.1 调整两个groupbox的布局 8.3 为窗体设置全局布局 二、代码拷贝和删除 1. 新建项目目录 2. 编译窗体文件和资源文件 3. Eric6项目 4. 拷贝文件 5. 删代码 6. 现有代码 7. 运行文件 三、代码修改 1. 添加import模块 2. tableView显示 3. 测试t
会洗碗的CV工程师
2023/02/26
5770
PyQt5数据库开发2 5.1 QSqlQueryModel
_PyQt5数据库开发2 5.1 QSqlQueryModel
调整后,两个groupBox和centralwidget之间出现了一层splitter
会洗碗的CV工程师
2023/11/28
1990
_PyQt5数据库开发2 5.1 QSqlQueryModel
PyQt5数据库开发2 5.2 QSqlRelationalTableModel
注意学生表有个外键指向部门表的departid,还有个外键指向专业表的majorid
会洗碗的CV工程师
2023/02/26
3920
PyQt5数据库开发2 5.2 QSqlRelationalTableModel
PyQt5数据库开发1 4.3 QSqlTableModel⑥
在右边的groupbox里的数据修改没问题,在左边的tableview里面修改就有问题
会洗碗的CV工程师
2023/11/30
2330
PyQt5数据库开发1 4.3 QSqlTableModel⑥
PyQt5数据库开发单表课设
对工程师表进行查看和对数据进行增删查改,并实现数据过滤,完善其中的一部分相关功能。
会洗碗的CV工程师
2023/11/28
2590
PyQt5数据库开发单表课设
PyQt5数据库开发3 6 QSqlQuery完整实操案例③
会洗碗的CV工程师
2023/11/30
2130
PyQt5数据库开发3 6 QSqlQuery完整实操案例③
PyQt5数据库开发2 5.2 QSqlRelationalTableModel②
注意除了actOpenDB和actQuit之外,其他Action的enabled属性取消
会洗碗的CV工程师
2023/11/30
1820
PyQt5数据库开发2 5.2 QSqlRelationalTableModel②
PyQt5编程基础 2.2 信号与槽函数
三个CheckBox的ObjectName分别设为chkBoxUnder、chkBoxItalic、chkBoxBold,text分别设为Underline、Italic、Bold,其中chkBoxUnder的checked属性打勾
会洗碗的CV工程师
2023/02/10
2K0
PyQt5编程基础 2.2 信号与槽函数
PyQt5数据库开发1 4.3 QSqlTableModel④上部
参见4 PyQt5数据库开发 4.1 SQL Server 2008 R2如何开启数据库的远程连接
会洗碗的CV工程师
2023/11/30
2390
PyQt5数据库开发1 4.3 QSqlTableModel④上部
PyQt5编程基础 2.2 信号与槽函数-绑定组件事件
进入Qt Creator,为Bold复选框设置槽函数,选toggled(bool)
会洗碗的CV工程师
2023/11/27
3680
PyQt5编程基础 2.2 信号与槽函数-绑定组件事件
PyQt5编程基础 2.2 信号与槽函数-设置信号与槽函数
鼠标点击选中确定按钮,按住鼠标左键拖动到窗体空白区域后释放左键,弹出关联设置对话框
会洗碗的CV工程师
2023/11/27
5320
PyQt5编程基础 2.2 信号与槽函数-设置信号与槽函数
PyQt5数据库开发1 4.3 QSqlTableModel①
修改工具栏的toolButtonStyle属性,改为ToolButtonTextUnderIcon
会洗碗的CV工程师
2023/11/30
1900
PyQt5数据库开发1 4.3 QSqlTableModel①
PyQt5编程基础 2.1 GUI程序的基本框架
用到了QtWidgets模块中的QApplication类。这个类是管理GUI应用程序的控制流程和设置的类
会洗碗的CV工程师
2023/02/10
1K0
PyQt5编程基础 2.1 GUI程序的基本框架
PyQt5开发环境搭建 1.2 简单的例子
(6)在Qt Creator中使用Go to Slot对话框为组件的信号生成槽函数框架,复制函数名到Eirc6中定义槽函数并编写实现代码
会洗碗的CV工程师
2023/02/26
1.5K0
PyQt5开发环境搭建 1.2 简单的例子
PyQt5开发环境搭建 1.2 简单的例子
(6)在Qt Creator中使用Go to Slot对话框为组件的信号生成槽函数框架,复制函数名到Eirc6中定义槽函数并编写实现代码
会洗碗的CV工程师
2023/11/28
2810
PyQt5开发环境搭建 1.2 简单的例子
PyQt5数据库开发1 4.3 QSqlTableModel②
frame由三个部分组成,一个排序GroupBox,一个数据过滤GroupBox,还有一个水平Spacer
会洗碗的CV工程师
2023/11/30
2160
PyQt5数据库开发1 4.3 QSqlTableModel②
相关推荐
PyQt5数据库开发1 4.3 QSqlTableModel④下部
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档