当前位置:   article > 正文

【Python】用PyQt5制作简单的图书借阅系统_python 实用qt开发图书管理界面

python 实用qt开发图书管理界面

目录

1.用PyQt5Designer设计窗体

主窗体

子窗体 

2.项目功能及代码

添加

子窗体函数

设置一个保存内容的文档 

 主窗体函数

删除

修改

 主窗体代码

 子窗体代码

搜索

菜单

 其他

主窗体

子窗体

窗口开始界面 

3.几个优化项目界面的功能

QMessageBox函数

设置背景图片

对提示栏进行设置 

对控件设置透明化

日期控件


1.用PyQt5Designer设计窗体

各个窗体控件的名字我都写在了下面

主窗体

子窗体 

具体设计思路可以看这篇博客:http://t.csdn.cn/9RKqx 

2.项目功能及代码

添加

子窗体函数

首先在子窗体定义一个函数,之后用槽函数把添加按钮和自定义函数连接起来。

  1. # 添加图书信息
  2. def insert(self):
  3. # 获取借阅者的姓名并去除前面的空格1
  4. # strip去除开头或结尾的空格
  5. name = self.lineEdit_2.text().strip()
  6. books = self.lineEdit.text().strip()
  7. time1 = self.dateEdit.text()
  8. time2 = self.dateEdit_2.text()
  9. if len(name) <= 0 or len(books) <= 0:
  10. # 如果有一个为空位,提示消息并结束此函数
  11. QMessageBox.information(self, "提示", "家人,咱这输入的不对,要不把空格去掉。", QMessageBox.Ok)
  12. return
  13. # 创建对象并初始化属性
  14. newBook = mybook.Books(name, books, time1, time2)
  15. # 把新学员对象追加到全局的学员列表中
  16. mybook.Book.append(newBook)
  17. # 获取表格控件的行数量
  18. # rowCount获取当前表格部件中的行数
  19. row = self.tableWidget.rowCount()
  20. # 以数量做索引添加一行
  21. # inserter_row用于在表格的指定位置插入一个新行
  22. self.tableWidget.insertRow(row)
  23. # 以借阅者为内容创建表格的一行
  24. item1 = QTableWidgetItem(name)
  25. item1.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
  26. self.tableWidget.setItem(row, 0, item1)
  27. item2 = QTableWidgetItem(books)
  28. item2.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
  29. self.tableWidget.setItem(row, 1, item2)
  30. item3 = QTableWidgetItem(time1)
  31. item3.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
  32. self.tableWidget.setItem(row, 2, item3)
  33. item4 = QTableWidgetItem(time2)
  34. item4.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
  35. self.tableWidget.setItem(row, 3, item4)
  36. # QMessageBox添加对话框
  37. result = QMessageBox.question(self, "消息", "添加成功,是否接着添加", QMessageBox.Yes | QMessageBox.No)
  38. if result == QMessageBox.Yes:
  39. self.lineEdit_2.setText('')
  40. self.lineEdit.setText('')
  41. if result == QMessageBox.No:
  42. self.close()

设置一个保存内容的文档 

因为我还没有学习数据库,所以想要保存到表格的内容只能暂时用一个文档储存起来

  1. import os
  2. Book = []
  3. def saveStudents():
  4. current_path = os.getcwd() + "\\Book.txt"
  5. f = open(current_path, "w+")
  6. for item in Book:
  7. f.write(item.name + ' ' + item.books + ' ' + item.time1 + ' ' + item.time2 + '\n')
  8. f.close()
  9. class Books(object):
  10. def __init__(self, name, books, time1, time2):
  11. self.name = name
  12. self.books = books
  13. self.time1 = time1
  14. self.time2 = time2

 主窗体函数

首先定义一个打开子窗体的函数

  1. def openmainWindow(self):
  2. # 创建子窗体对象,并传参。
  3. self.child = UiMainwindow(-1, "添加", self.tableWidget)
  4. self.child.setWindowModality(Qt.ApplicationModal)
  5. # 固定子窗体的大小
  6. self.child.setFixedSize(self.child.width(), self.child.height())
  7. # 设置子窗体以模态方式打开
  8. self.child.setWindowModality(Qt.ApplicationModal)
  9. # 展示
  10. self.child.show()

删除

  1. # 删除功能
  2. def deleteStu(self):
  3. # 获取表格控件中的选中行索引
  4. index = self.tableWidget.currentRow()
  5. # 判断是否有选中行
  6. if index < 0:
  7. # 如果没有选中行,提示消息并结束此函数
  8. QMessageBox.information(None, "提示", "请选中删除行", QMessageBox.Ok)
  9. return
  10. # 消息框询问是否继续添加,接收返回值
  11. result = QMessageBox.question(None, "消息", "是否删除选中行?", QMessageBox.Yes | QMessageBox.No)
  12. # 判断返回值是否消息框的No按钮
  13. if result == QMessageBox.Yes:
  14. # 获取表格控件选中行第一列的内容
  15. name = self.tableWidget.selectedItems()[0].text()
  16. # 删除表格控件中索引所在行
  17. self.tableWidget.removeRow(index)
  18. # 循环学员列表
  19. for item in Book:
  20. # 如果学员姓名等于删除行第一列内容
  21. if item.name == name:
  22. # 从学员列表中删除此学员
  23. Book.remove(item)
  24. break

修改

 主窗体代码

  1. # 打开修改窗体
  2. def modifyDialogOpen(self):
  3. index = self.tableWidget.currentRow()
  4. # 如果没有选中行
  5. if index < 0:
  6. QMessageBox.information(None, "提示", "请选中修改的信息", QMessageBox.Ok)
  7. return
  8. # 获取表格控件中的行的第一行内容
  9. name = self.tableWidget.selectedItems()[0].text()
  10. # 定义变量保存选中学员列表中的索引
  11. index = 0
  12. # 循环学员列表
  13. for item in Book:
  14. if name == item.name:
  15. break
  16. # 学员列表索引+1
  17. index += 1
  18. # 创建窗口对象并传参
  19. self.child = UiMainwindow(index, "修改", self.tableWidget)
  20. # 设置窗口以应用程序模态打开
  21. self.child.setWindowModality(Qt.ApplicationModal)
  22. # 设置窗口不可调整大小
  23. self.child.setFixedSize(self.child.width(), self.child.height())
  24. self.child.show()

 子窗体代码

  1. # 修改信息
  2. def alter(self):
  3. # 获取借阅者的姓名并去除前面的空格
  4. # strip去除开头或结尾的空格
  5. name = self.lineEdit_2.text().strip()
  6. books = self.lineEdit.text().strip()
  7. time1 = self.dateEdit.text()
  8. time2 = self.dateEdit_2.text()
  9. # dateEdit = QDateTimeEdit(QDate.currentDate(), self)
  10. if len(name) <= 0 or len(books) <= 0:
  11. # 如果有一个为空位,提示消息并结束此函数
  12. QMessageBox.information(self, "提示", "家人,咱这输入的不对。", QMessageBox.Ok)
  13. return
  14. # 设置表格控件中选中列的文本文件
  15. self.tableWidget.selectedItems()[0].setText(name)
  16. self.tableWidget.selectedItems()[1].setText(books)
  17. self.tableWidget.selectedItems()[2].setText(time1)
  18. self.tableWidget.selectedItems()[3].setText(time2)
  19. mybook.Book[self.index].name = name
  20. mybook.Book[self.index].books = books
  21. mybook.Book[self.index].time1 = time1
  22. mybook.Book[self.index].time2 = time2
  23. # 关闭
  24. result = QMessageBox.question(self, "消息", "修改成功", QMessageBox.Ok)
  25. if result == QMessageBox.Ok:
  26. self.close()
  27. self.close()

搜索

  1. # 查找功能
  2. def finding(self):
  3. # 获取查询的文本框内容并取消前后空格
  4. name = self.lineEdit.text().strip()
  5. # 判断查询内容是否为空
  6. if len(name) <= 0:
  7. # 如果为空,提示用户
  8. QMessageBox.information(None, "提示", "请输入借阅者姓名", QMessageBox.Ok)
  9. # 结束此函数
  10. return
  11. # 设置表格控件的数据行为0
  12. self.tableWidget.setRowCount(0)
  13. # 清空表格控件的内容,与上面一行共同使用清空所有行
  14. self.tableWidget.clearContents()
  15. # 循环学员列表,重新加载学员信息显示在表格控件
  16. for item in Book:
  17. if name == item.name:
  18. # 获取表格控件的行数
  19. row = self.tableWidget.rowCount()
  20. # 根据行数做索引添加一行
  21. self.tableWidget.insertRow(row)
  22. # 创建列对象,内容是学员名称
  23. item1 = QTableWidgetItem(item.name)
  24. # 水平垂直方向居中
  25. item1.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
  26. # 把新建的列对象设置在表格控件索引row所在行,索引0所在列
  27. self.tableWidget.setItem(row, 0, item1)
  28. item2 = QTableWidgetItem(item.books)
  29. item2.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
  30. # 把新建的列对象设置在表格控件索引row所在行,索引1
  31. self.tableWidget.setItem(row, 1, item2)
  32. item3 = QTableWidgetItem(item.time1)
  33. item3.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
  34. # 把新建的列对象设置在表格控件索引row所在行,索引2所在列
  35. self.tableWidget.setItem(row, 2, item3)
  36. item4 = QTableWidgetItem(item.time2)
  37. item4.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
  38. # 把新建的列对象设置在表格控件索引row所在行,索引3 所在列
  39. self.tableWidget.setItem(row, 3, item4)
  40. break

搜索借阅者的名字,可以搜索到想要的同学 

菜单

点击鼠标右键,可弹出添加、删除。修改。三个基本功能,另外我又添加了返回功能,是在搜索之后点击菜单返回表格全部内容。

  1. # 弹出菜单
  2. def rightShowMenu(self):
  3. rightMenu = QMenu()
  4. menu1 = rightMenu.addAction("添加")
  5. menu1.triggered.connect(self.openmainWindow)
  6. menu2 = rightMenu.addAction("修改")
  7. menu2.triggered.connect(self.modifyDialogOpen)
  8. menu3 = rightMenu.addAction("删除")
  9. menu3.triggered.connect(self.deleteStu)
  10. menu4 = rightMenu.addAction("返回")
  11. menu4.triggered.connect(self.back)
  12. rightMenu.show()
  13. rightMenu.exec_(QCursor.pos())

返回功能很简单,先把表格当前内容删除,然后重新加载全部内容。 

  1. # 显示——学员信息显示在 tableWidget 中
  2. def back(self):
  3. # 设置表格控件的数据行为0
  4. self.tableWidget.setRowCount(0)
  5. # 清空表格控件的内容,与上面一行共同使用清空所有行
  6. self.tableWidget.clearContents()
  7. # 循环学员信息列表
  8. for item in Book:
  9. # 获取表格控件的行数
  10. row = self.tableWidget.rowCount()
  11. self.tableWidget.insertRow(row)
  12. item1 = QTableWidgetItem(item.name)
  13. item1.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
  14. self.tableWidget.setItem(row, 0, item1)
  15. item2 = QTableWidgetItem(item.books)
  16. item2.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
  17. self.tableWidget.setItem(row, 1, item2)
  18. item3 = QTableWidgetItem(item.time1)
  19. item3.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
  20. self.tableWidget.setItem(row, 2, item3)
  21. item4 = QTableWidgetItem(item.time2)
  22. item4.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
  23. self.tableWidget.setItem(row, 3, item4)

 其他

主窗体

  1. # 学员信息显示到table控件里
  2. def loadTable(self):
  3. # 循环学员信息列表
  4. for item in Book:
  5. # 获取表格控件的行数
  6. row = self.tableWidget.rowCount()
  7. # 根据行数做索引添加一列
  8. self.tableWidget.insertRow(row)
  9. # 创建列对象
  10. item1 = QTableWidgetItem(item.name)
  11. item1.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
  12. self.tableWidget.setItem(row, 0, item1)
  13. item2 = QTableWidgetItem(item.books)
  14. item2.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
  15. self.tableWidget.setItem(row, 1, item2)
  16. item3 = QTableWidgetItem(item.time1)
  17. item3.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
  18. self.tableWidget.setItem(row, 2, item3)
  19. item4 = QTableWidgetItem(item.time2)
  20. item4.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
  21. self.tableWidget.setItem(row, 3, item4)

子窗体

  1. def insert_expurgate(self):
  2. # 判断标题来进行修改或添加
  3. if self.title == "添加":
  4. self.insert()
  5. else:
  6. self.alter()
  7. # 窗体加载时调用
  8. def myInitWindow(self):
  9. # 单击保存按钮调用函数
  10. self.OK.clicked.connect(self.insert_expurgate)
  11. # 如果标题是修改
  12. if self.title == "修改":
  13. self.lineEdit_2.setText(self.tableWidget.selectedItems()[0].text())
  14. self.lineEdit.setText(self.tableWidget.selectedItems()[1].text()
  15. self.dateEdit.setDate(QDate.currentDate())
  16. self.dateEdit_2.setDate(QDate.currentDate().addDays(30))

窗口开始界面 

  1. import sys
  2. from PyQt5.QtWidgets import QApplication, QMainWindow
  3. from untitled1 import *
  4. class ManagerWindow(QMainWindow):
  5. def closeEvent(self, event):
  6. result = QtWidgets.QMessageBox.question(self, "退出", "是否保存后退出?",
  7. QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No)
  8. if result == QtWidgets.QMessageBox.Yes:
  9. saveStudents()
  10. # 执行关闭功能
  11. event.accept()
  12. # 程序入口
  13. if __name__ == '__main__': # python模拟程序入口
  14. # 创建主窗体
  15. app = QApplication(sys.argv)
  16. # 设计的UI界面实体化
  17. ui = Ui_Dialog()
  18. # 创建主窗体对象,一个应用程序可以有多个窗体,但是一个窗体不能代表一个应用程序。
  19. MainWindow = ManagerWindow()
  20. # 把所有用到的控件化在主窗体上。
  21. ui.setupUi(MainWindow)
  22. # 设置窗体大小不能更改
  23. MainWindow.setFixedSize(MainWindow.width(), MainWindow.height())
  24. # 主窗体自己的宽 #主窗体自己的高
  25. # 显示主窗体
  26. MainWindow.show()
  27. sys.exit(app.exec_())

3.几个优化项目界面的功能

QMessageBox函数

大家可能好奇QMessageBox函数,它的功能是产生一个提示框,在报错或者删除时弹出来提示。

 

  1. result = QMessageBox.question(self, "消息", "添加成功,是否接着添加",
  2. QMessageBox.Yes | QMessageBox.No)
  3. QMessageBox.information(self, "提示", "家人,咱这输入的不对,要不把空格去掉。", QMessageBox.Ok)

设置背景图片

  1. # 设置窗体背景图片
  2. palette = QPalette()
  3. pix = QPixmap("项目图片/feb1fe93862d873eacf66dd4d82d307e.jpg")
  4. # # 自调背景图大小和窗体适应
  5. pix = pix.scaled(mainWindow.width(), mainWindow.height())
  6. palette.setBrush(QPalette.Background, QBrush(pix))
  7. mainWindow.setPalette(palette)

对提示栏进行设置 

  1. # 设置搜索栏提示信息
  2. self.lineEdit.setPlaceholderText('请输入要查询的学生姓名……')

对控件设置透明化

  1. # 控件半透明设置
  2. op = QtWidgets.QGraphicsOpacityEffect()
  3. # 0.7是控件的半透明程度
  4. op.setOpacity(0.7)
  5. self.lineEdit.setGraphicsEffect(op)
  6. self.lineEdit.setAutoFillBackground(True)

日期控件

这个代码可以让日期控件上显示当前日期

  1. self.dateEdit.setDate(QDate.currentDate())
  2. # addDays是在原基础上增加的天数
  3. self.dateEdit_2.setDate(QDate.currentDate().addDays(30))

 需要原码的可以到下面链接下载:

PyQt5+Python做的图书借阅系统-Python文档类资源-CSDN文库

如果下载不了可以后台私信我,好本篇博客内容就到这里感谢您的观看,如果对您有帮助的话请留下你的赞。 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/307809
推荐阅读
相关标签
  

闽ICP备14008679号