手把手教你开发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.hqwc.cn/news/465861.html

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

相关文章

每日五道java面试题之java基础篇(五)

第一题. final、finally、finalize 的区别? final ⽤于修饰变量、⽅法和类:final 修饰的类不可被继承;修饰的⽅法不可被重写;修饰的变量不可变。finally 作为异常处理的⼀部分,它只能在 try/catch 语句中,…

Linux ipvlan详解(l2、l3、l3s和bridge、private和vepa模式)

Linux ipvlan详解,测试l2、l3、l3s和bridge、private和vepa模式。 最近在看Docker的网络,看到关于ipvlan网络的介绍。查阅了相关资料,记录如下。 参考 1.图解几个与Linux网络虚拟化相关的虚拟网卡-VETH/MACVLAN/MACVTAP/IPVLAN 2.IPVlan 详…

关于物理机ping不通虚拟机问题

方法一 设置虚拟机处于桥接状态即可:(虚拟机->设置->网络适配器),选择完确定,重启虚拟机即可。 方法二 如果以上配置还是无法ping通:(编辑->虚拟网络编辑器) 首先查看主机网…

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

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

VUE前端实现token的无感刷新

前言 说实话,这个其实没啥好讲的,要说有复杂度的话,也主要是在后端。 实现token无感刷新对于前端来说是一项十分常用的技术,其本质都是为了优化用户体验,当token过期时不需要用户调回登录页重新登录,而是…

【EAI 016】VIMA: General Robot Manipulation with Multimodal Prompts

论文标题:VIMA: General Robot Manipulation with Multimodal Prompts 论文作者:Yunfan Jiang, Agrim Gupta, Zichen Zhang, Guanzhi Wang, Yongqiang Dou, Yanjun Chen, Li Fei-Fei, Anima Anandkumar, Yuke Zhu, Linxi Fan 作者单位:Stanfo…

springboot179基于javaweb的流浪宠物管理系统的设计与实现

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

nba2k24 韩旭面补

nba2k23-24 韩旭面补 nba2k23-nba2k24通用 韩旭面补 下载地址: https://www.changyouzuhao.cn/9605.html

【开源】JAVA+Vue.js实现森林火灾预警系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 系统基础模块2.3 烟雾传感器模块2.4 温度传感器模块2.5 历史记录模块2.6 园区数据模块 三、系统设计3.1 用例设计3.1.1 森林园区基础系统用例设计3.1.2 森林预警数据用例设计 3.2 数据库设计3.2.1 烟雾…

车载电子电器架构 —— 网络拓扑开发概述

车载电子电器架构 —— 网络拓扑开发概述 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明…

闭环控制系统手自动策略(车辆定速巡航应用)

闭环控制系统的手自动策略并不会完全一样,不同的行业,基于不同的规范和安全考虑给出的手自动策略是不一样的,这里我们介绍汽车行业定速巡航应用。 PID闭环控制系统手自动切换的相关文章,还可以查看下面链接: 无扰切换…

详细介绍Python网络编程模块

根据前面对网络分层棋型的介绍,我们知道实际的网络模型大致分为四层,这四层各有对应的网络协议提供支持, 网络层协议主要是 IP,它是所有互联网协议的基础,其中 ICMP(Internet Control Message Protocol&…