锋哥原创的PyQt6图书管理系统视频教程:
PyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~_哔哩哔哩_bilibiliPyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~共计24条视频,包括:PyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~、第2讲 登录功能UI设计实现、第3讲 数据库操作工具包dbUtil.py封装等,UP主更多精彩视频,请关注UP账号。https://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)
运行测试: