手把手教你开发Python桌面应用-PyQt6图书管理系统-图书信息修改实现

锋哥原创的PyQt6图书管理系统视频教程:

PyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~_哔哩哔哩_bilibiliPyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~共计24条视频,包括:PyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~、第2讲 登录功能UI设计实现、第3讲 数据库操作工具包dbUtil.py封装等,UP主更多精彩视频,请关注UP账号。icon-default.png?t=N7T8https://www.bilibili.com/video/BV18t4y1R7Qp/首先表单操作界面,我们需要做一些处理,编号输入框设置只读,背景色灰色,默认的作者性别,我们可以设置成男,以及图书类别数据需要初始化下。

# 设置默认选中self.manRadio.setChecked(True)

初始化下拉框数据

    def initBookTypeListComboBox(self):"""初始化下拉框数据:return:"""bookTypeList = bookTypeDao.list("")  # 获取所有图书类别信息self.s_bookTypeComboBox.addItem("请选择图书类别...", -1)self.bookTypeComboBox.addItem("请选择图书类别...", -1)for bookType in bookTypeList:self.bookTypeComboBox.addItem(bookType[1], bookType[0])self.s_bookTypeComboBox.addItem(bookType[1], bookType[0])

编号输入框设置只读,以及背景色改成灰色

self.idInput.setReadOnly(True)self.idInput.setStyleSheet("background-color:gray")

接下来是行点击事件,点击行,获取行数据,初始化表单

先定义初始化表单方法initForm

    def initForm(self, index: QModelIndex):"""初始化Form:param index::return:"""rowIndex = index.row()  # 获取行索引self.idInput.setText(self.bookTable.item(rowIndex, 0).text())  # 设置编号self.bookNameInput.setText(self.bookTable.item(rowIndex, 1).text())  # 设置图书名称self.authorInput.setText(self.bookTable.item(rowIndex, 2).text())  # 设置图书作者self.bookTypeComboBox.setCurrentText(self.bookTable.item(rowIndex, 3).text())  # 设置图书类别if self.bookTable.item(rowIndex, 4).text() == '男':  # 设置性别self.manRadio.setChecked(True)else:self.femaleRadio.setChecked(True)self.priceInput.setText(self.bookTable.item(rowIndex, 5).text())  # 设置图书价格self.bookDescInput.setPlainText(self.bookTable.item(rowIndex, 6).text())  # 设置图书类别描述

然后是行点击事件绑定

# 行点击事件self.bookTable.clicked.connect(self.initForm)

运行测试:

我们具体执行修改操作,bookDao里编写update方法:

def update(book: Book):"""图书修改:param book: 图书实体:return: 返回执行的记录条数"""con = Nonetry:con = dbUtil.getCon()cursor = con.cursor()cursor.execute(f"update t_book set bookName='{book.bookName}',author='{book.author}',sex='{book.sex}',price={book.price},bookTypeId={book.bookTypeId},bookDesc='{book.bookDesc}' where id={book.id}")return cursor.rowcountexcept Exception as e:print(e)con.rollback()return 0finally:dbUtil.closeCon(con)

更新表单的时候,我们向dao层update传递的book实体对象参数,构造的时候,是所有参数都包含,所以我们要再Book实体类里重新定义一个重载构造方法:

    @staticmethoddef my_constructor2(id, bookName, author, sex, price, bookTypeId, bookDesc):obj = Book(bookName, author, bookTypeId)obj.id = idobj.sex = sexobj.price = priceobj.bookDesc = bookDescreturn obj

修改成功后,还需要重置表单,所以写编写一个重置表单的方式resetForm

    def resetForm(self):"""重置表单:return:"""self.idInput.setText("")self.bookNameInput.setText("")self.authorInput.setText("")self.bookTypeComboBox.setCurrentIndex(0)self.manRadio.setChecked(True)self.priceInput.setText("")self.bookDescInput.setPlainText("")

接下来,bookManage.py的Ui_Form里,加下update方法:

    def update(self):"""更新表单:return:"""id = self.idInput.text()if id.strip() == "":QMessageBox.information(None, '系统提示', '请选中您需要编辑的那行数据!')returnbookName = self.bookNameInput.text()if bookName.strip() == "":QMessageBox.information(None, '系统提示', '请输入图书名称!')returnsex = "男"if self.femaleRadio.isChecked():sex = "女"price = self.priceInput.text()if price.strip() == "":QMessageBox.information(None, '系统提示', '请输入图书价格!')returnauthor = self.authorInput.text()if author.strip() == "":QMessageBox.information(None, '系统提示', '请输入图书作者!')returnbookTypeId = self.bookTypeComboBox.currentData()bookDesc = self.bookDescInput.toPlainText();book = Book.my_constructor2(id, bookName, author, sex, price, bookTypeId, bookDesc)if bookDao.update(book) > 0:QMessageBox.information(None, '系统提示', '修改成功!')self.initTable()self.resetForm()else:QMessageBox.warning(None, '系统提示', '修改失败!')

编辑按钮绑定点击事件

# 编辑按钮点击事件绑定self.modifyBtn.clicked.connect(self.update)

运行测试:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/679900.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从互联网的公开信息中,找到属于你的赚钱思路

一、教程描述 人们在互联网上的每一次搜索、每一次关注、每一次点击、每一次点赞、每一次评论、每一次付费,都生成了大量的数据和信息,暴露着人们的真实想法、欲望、恐惧和需求。这些数据和信息,就是我们身边的一座“金矿”,而大…

1【算法】——最大子数组问题(maximum subarray)

一.问题描述 假如我们有一个数组,数组中的元素有正数和负数,如何在数组中找到一段连续的子数组,使得子数组各个元素之和最大。 二.问题分析 分治法求解: 初始状态: low0;highA.length-1;mid&am…

最新的 Ivanti SSRF 零日漏洞正在被大规模利用

Bleeping Computer 网站消息,安全研究员发现 Ivanti Connect Secure 和 Ivanti Policy Secure 服务器端请求伪造 (SSRF) 漏洞(CVE-2024-21893 )正在被多个威胁攻击者大规模利用。 2024 年 1 月 31 日,Ivanti 首次就网关 SAML 组件…

万维网的文档

目录 1 万维网的文档 动态万维网文档 CGI CGI 网关程序 活动万维网文档 用 Java 语言创建活动文档 1 万维网的文档 分为: 静态万维网文档。内容不会改变。简单。(html、xml、css) 动态万维网文档。文档的内容由应用程序动态创建。 活动万维网文档。由浏览器端…

SpringBoot3整合Knife4j

前置&#xff1a; 官网&#xff1a;快速开始 | Knife4j gitee&#xff1a;swagger-bootstrap-ui-demo: knife4j 以及swagger-bootstrap-ui 集成框架示例项目 - Gitee.com 1.依赖引入&#xff1a; ps&#xff1a;json处理需要引入相关包 <dependency><groupId>c…

基于语义解析的知识图谱问答系统

目录 前言1 背景介绍2 语义解析的核心技术2.1 自然语言处理&#xff08;NLP&#xff09;2.2 语义表示学习2.3 实体关系抽取 3 语义解析的基本步骤3.1 短语检测3.2 资源映射3.3 语义组合3.4 逻辑表达式生成 4 处理与知识图谱无关的问句4.1 Bridging技术4.2 确定谓词4.3 Paraphra…

【新书推荐】7.4节 寄存器间接和相对寻址方式

本节内容&#xff1a;当指令操作数为内存操作数&#xff0c;且内存操作数的地址使用指针寄存器表示时&#xff0c;称为寄存器间接寻址方式。 ■寄存器间接寻址方式&#xff1a;在地址表达式中&#xff0c;只能使用BX、SI、DI、BP四个指针寄存器用来寻址。 7.4.1 寄存器间接寻…

猫头虎分享已解决Bug || API限制超额(API Rate Limiting):RateLimitExceeded, APILimitReached

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

mysql入门到精通006-基础篇-多表查询

1、多表关系介绍 1.1 概念 项目开发中&#xff0c;在进行数据库表结构设计时&#xff0c;会根据业务需求和业务模块之间的关系&#xff0c;分析并设计表结构&#xff0c;由于业务之间相互关联&#xff0c;所以各个表结构之间也存在各种联系&#xff0c;基本上分为3种&#xf…

LeetCode.144. 二叉树的前序遍历

题目 144. 二叉树的前序遍历 分析 这道题目是比较基础的题目&#xff0c;我们首先要知道二叉树的前序遍历是什么&#xff1f; 就是【根 左 右】 的顺序&#xff0c;然后利用递归的思想&#xff0c;就可以得到这道题的答案&#xff0c;任何的递归都可以采用 栈 的结构来实现…

Microsoft Word 清除格式

Microsoft Word 清除格式 References 选择文本&#xff0c;用快捷键 Ctrl Shift N&#xff0c;可以快速清除格式。 选择文本&#xff0c;清除格式。 References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

leetcode(矩阵)74. 搜索二维矩阵(C++详细解释)DAY7

文章目录 1.题目示例提示 2.解答思路3.实现代码结果 4.总结 1.题目 给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中…

Confluence CVE-2023-22527利用工具

介绍 Confluence CVE 2021&#xff0c;2022&#xff0c;2023 利用工具&#xff0c;支持命令执行&#xff0c;哥斯拉&#xff0c;冰蝎 内存马注入 支持 Confluence 版本&#xff1a;CVE-2021-26084&#xff0c;CVE-2022-26134&#xff0c;CVE_2023_22515&#xff0c;CVE-2023-2…

计算机网络——06分组延时、丢失和吞吐量

分组延时、丢失和吞吐量 分组丢失和延时是怎样发生的 在路由器缓冲区的分组队列 分组到达链路的速率超过了链路输出的能力分组等待排到队头、被传输 延时原因&#xff1a; 当当前链路有别的分组进行传输&#xff0c;分组没有到达队首&#xff0c;就会进行排队&#xff0c;从…

【MySQL进阶之路】生产案例:大量数据刷盘导致的数据库性能抖动问题优化

欢迎关注公众号&#xff08;通过文章导读关注&#xff1a;【11来了】&#xff09;&#xff0c;及时收到 AI 前沿项目工具及新技术的推送&#xff01; 在我后台回复 「资料」 可领取编程高频电子书&#xff01; 在我后台回复「面试」可领取硬核面试笔记&#xff01; 文章导读地址…

【Docker】Docker Container(容器)

文章目录 一、什么是容器&#xff1f;二、为什么需要容器&#xff1f;三、容器的生命周期容器OOM容器异常退出容器暂停 四、容器命令详解docker createdocker logsdocker attachdocker execdocker startdocker stopdocker restartdocker killdocker topdocker statsdocker cont…

Apache 神禹(shenyu)源码阅读(一)——Admin向Gateway的数据同步(Admin端)

源码版本&#xff1a;2.6.1 单机源码启动项目 启动教程&#xff1a;社区新人开发者启动及开发防踩坑指南 源码阅读 前言 开了个新坑&#xff0c;也是第一次阅读大型项目源码&#xff0c;写文章记录。 在写文章前&#xff0c;已经跑了 Divide 插件体验了一下&#xff08;体…

DataEase

一. DataEase (一). 说明 安装文档 DataEase 是开源的数据可视化分析工具&#xff0c;帮助用户快速分析数据并洞察业务趋势&#xff0c;从而实现业务的改进与优化。DataEase 支持丰富的数据源连接&#xff0c;能够通过拖拉拽方式快速制作图表&#xff0c;并可以方便的与他人分…

比特币突然大涨

作者&#xff1a;秦晋 2月9日&#xff0c;除夕夜&#xff0c;比特币突然大涨&#xff0c;最高涨至48219美元&#xff0c;涨幅超6%。据CNBC报道&#xff0c;本周比特币已经上涨10.76%&#xff0c;创下自12月8日以来的最佳的一周。本周ETH上涨8.46%&#xff0c;成为自1月12日以来…

mac无法往硬盘里存东西 Mac硬盘读不出来怎么办 Mac硬盘格式 硬盘检测工具

mac有时候会出现一些问题&#xff0c;比如无法往硬盘里存东西&#xff0c;或者无法往硬盘上拷贝文件。这些问题会给用户带来很大的困扰&#xff0c;影响正常的工作和学习。那么&#xff0c;mac无法往硬盘里存东西&#xff0c;mac无法往硬盘上拷贝怎么办呢&#xff1f;软妹子将为…