赞
踩
目录
各个窗体控件的名字我都写在了下面
具体设计思路可以看这篇博客:http://t.csdn.cn/9RKqx
首先在子窗体定义一个函数,之后用槽函数把添加按钮和自定义函数连接起来。
- # 添加图书信息
- def insert(self):
- # 获取借阅者的姓名并去除前面的空格1
- # strip去除开头或结尾的空格
- name = self.lineEdit_2.text().strip()
- books = self.lineEdit.text().strip()
- time1 = self.dateEdit.text()
- time2 = self.dateEdit_2.text()
- if len(name) <= 0 or len(books) <= 0:
- # 如果有一个为空位,提示消息并结束此函数
- QMessageBox.information(self, "提示", "家人,咱这输入的不对,要不把空格去掉。", QMessageBox.Ok)
- return
- # 创建对象并初始化属性
- newBook = mybook.Books(name, books, time1, time2)
- # 把新学员对象追加到全局的学员列表中
- mybook.Book.append(newBook)
- # 获取表格控件的行数量
- # rowCount获取当前表格部件中的行数
- row = self.tableWidget.rowCount()
- # 以数量做索引添加一行
- # inserter_row用于在表格的指定位置插入一个新行
- self.tableWidget.insertRow(row)
- # 以借阅者为内容创建表格的一行
- item1 = QTableWidgetItem(name)
- item1.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
- self.tableWidget.setItem(row, 0, item1)
- item2 = QTableWidgetItem(books)
- item2.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
- self.tableWidget.setItem(row, 1, item2)
- item3 = QTableWidgetItem(time1)
- item3.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
- self.tableWidget.setItem(row, 2, item3)
- item4 = QTableWidgetItem(time2)
- item4.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
- self.tableWidget.setItem(row, 3, item4)
- # QMessageBox添加对话框
- result = QMessageBox.question(self, "消息", "添加成功,是否接着添加", QMessageBox.Yes | QMessageBox.No)
- if result == QMessageBox.Yes:
- self.lineEdit_2.setText('')
- self.lineEdit.setText('')
- if result == QMessageBox.No:
- self.close()
因为我还没有学习数据库,所以想要保存到表格的内容只能暂时用一个文档储存起来
- import os
-
- Book = []
-
-
- def saveStudents():
- current_path = os.getcwd() + "\\Book.txt"
- f = open(current_path, "w+")
- for item in Book:
- f.write(item.name + ' ' + item.books + ' ' + item.time1 + ' ' + item.time2 + '\n')
- f.close()
-
-
- class Books(object):
- def __init__(self, name, books, time1, time2):
- self.name = name
- self.books = books
- self.time1 = time1
- self.time2 = time2
首先定义一个打开子窗体的函数
- def openmainWindow(self):
- # 创建子窗体对象,并传参。
- self.child = UiMainwindow(-1, "添加", self.tableWidget)
- self.child.setWindowModality(Qt.ApplicationModal)
- # 固定子窗体的大小
- self.child.setFixedSize(self.child.width(), self.child.height())
- # 设置子窗体以模态方式打开
- self.child.setWindowModality(Qt.ApplicationModal)
- # 展示
- self.child.show()
- # 删除功能
- def deleteStu(self):
- # 获取表格控件中的选中行索引
- index = self.tableWidget.currentRow()
- # 判断是否有选中行
- if index < 0:
- # 如果没有选中行,提示消息并结束此函数
- QMessageBox.information(None, "提示", "请选中删除行", QMessageBox.Ok)
- return
- # 消息框询问是否继续添加,接收返回值
- result = QMessageBox.question(None, "消息", "是否删除选中行?", QMessageBox.Yes | QMessageBox.No)
- # 判断返回值是否消息框的No按钮
- if result == QMessageBox.Yes:
- # 获取表格控件选中行第一列的内容
- name = self.tableWidget.selectedItems()[0].text()
- # 删除表格控件中索引所在行
- self.tableWidget.removeRow(index)
- # 循环学员列表
- for item in Book:
- # 如果学员姓名等于删除行第一列内容
- if item.name == name:
- # 从学员列表中删除此学员
- Book.remove(item)
- break
- # 打开修改窗体
- def modifyDialogOpen(self):
- index = self.tableWidget.currentRow()
- # 如果没有选中行
- if index < 0:
- QMessageBox.information(None, "提示", "请选中修改的信息", QMessageBox.Ok)
- return
- # 获取表格控件中的行的第一行内容
- name = self.tableWidget.selectedItems()[0].text()
- # 定义变量保存选中学员列表中的索引
- index = 0
- # 循环学员列表
- for item in Book:
- if name == item.name:
- break
- # 学员列表索引+1
- index += 1
- # 创建窗口对象并传参
- self.child = UiMainwindow(index, "修改", self.tableWidget)
- # 设置窗口以应用程序模态打开
- self.child.setWindowModality(Qt.ApplicationModal)
- # 设置窗口不可调整大小
- self.child.setFixedSize(self.child.width(), self.child.height())
- self.child.show()
- # 修改信息
- def alter(self):
- # 获取借阅者的姓名并去除前面的空格
- # strip去除开头或结尾的空格
- name = self.lineEdit_2.text().strip()
- books = self.lineEdit.text().strip()
- time1 = self.dateEdit.text()
- time2 = self.dateEdit_2.text()
- # dateEdit = QDateTimeEdit(QDate.currentDate(), self)
- if len(name) <= 0 or len(books) <= 0:
- # 如果有一个为空位,提示消息并结束此函数
- QMessageBox.information(self, "提示", "家人,咱这输入的不对。", QMessageBox.Ok)
- return
- # 设置表格控件中选中列的文本文件
- self.tableWidget.selectedItems()[0].setText(name)
- self.tableWidget.selectedItems()[1].setText(books)
- self.tableWidget.selectedItems()[2].setText(time1)
- self.tableWidget.selectedItems()[3].setText(time2)
- mybook.Book[self.index].name = name
- mybook.Book[self.index].books = books
- mybook.Book[self.index].time1 = time1
- mybook.Book[self.index].time2 = time2
- # 关闭
- result = QMessageBox.question(self, "消息", "修改成功", QMessageBox.Ok)
- if result == QMessageBox.Ok:
- self.close()
- self.close()
- # 查找功能
- def finding(self):
- # 获取查询的文本框内容并取消前后空格
- name = self.lineEdit.text().strip()
- # 判断查询内容是否为空
- if len(name) <= 0:
- # 如果为空,提示用户
- QMessageBox.information(None, "提示", "请输入借阅者姓名", QMessageBox.Ok)
- # 结束此函数
- return
- # 设置表格控件的数据行为0
- self.tableWidget.setRowCount(0)
- # 清空表格控件的内容,与上面一行共同使用清空所有行
- self.tableWidget.clearContents()
- # 循环学员列表,重新加载学员信息显示在表格控件
- for item in Book:
- if name == item.name:
- # 获取表格控件的行数
- row = self.tableWidget.rowCount()
- # 根据行数做索引添加一行
- self.tableWidget.insertRow(row)
- # 创建列对象,内容是学员名称
- item1 = QTableWidgetItem(item.name)
- # 水平垂直方向居中
- item1.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
- # 把新建的列对象设置在表格控件索引row所在行,索引0所在列
- self.tableWidget.setItem(row, 0, item1)
- item2 = QTableWidgetItem(item.books)
- item2.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
- # 把新建的列对象设置在表格控件索引row所在行,索引1
- self.tableWidget.setItem(row, 1, item2)
- item3 = QTableWidgetItem(item.time1)
- item3.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
- # 把新建的列对象设置在表格控件索引row所在行,索引2所在列
- self.tableWidget.setItem(row, 2, item3)
- item4 = QTableWidgetItem(item.time2)
- item4.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
- # 把新建的列对象设置在表格控件索引row所在行,索引3 所在列
- self.tableWidget.setItem(row, 3, item4)
- break
搜索借阅者的名字,可以搜索到想要的同学
点击鼠标右键,可弹出添加、删除。修改。三个基本功能,另外我又添加了返回功能,是在搜索之后点击菜单返回表格全部内容。
- # 弹出菜单
- def rightShowMenu(self):
- rightMenu = QMenu()
- menu1 = rightMenu.addAction("添加")
- menu1.triggered.connect(self.openmainWindow)
- menu2 = rightMenu.addAction("修改")
- menu2.triggered.connect(self.modifyDialogOpen)
- menu3 = rightMenu.addAction("删除")
- menu3.triggered.connect(self.deleteStu)
- menu4 = rightMenu.addAction("返回")
- menu4.triggered.connect(self.back)
- rightMenu.show()
- rightMenu.exec_(QCursor.pos())
返回功能很简单,先把表格当前内容删除,然后重新加载全部内容。
- # 显示——学员信息显示在 tableWidget 中
- def back(self):
- # 设置表格控件的数据行为0
- self.tableWidget.setRowCount(0)
- # 清空表格控件的内容,与上面一行共同使用清空所有行
- self.tableWidget.clearContents()
- # 循环学员信息列表
- for item in Book:
- # 获取表格控件的行数
- row = self.tableWidget.rowCount()
- self.tableWidget.insertRow(row)
- item1 = QTableWidgetItem(item.name)
- item1.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
- self.tableWidget.setItem(row, 0, item1)
- item2 = QTableWidgetItem(item.books)
- item2.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
- self.tableWidget.setItem(row, 1, item2)
- item3 = QTableWidgetItem(item.time1)
- item3.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
- self.tableWidget.setItem(row, 2, item3)
- item4 = QTableWidgetItem(item.time2)
- item4.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
- self.tableWidget.setItem(row, 3, item4)
- # 学员信息显示到table控件里
- def loadTable(self):
- # 循环学员信息列表
- for item in Book:
- # 获取表格控件的行数
- row = self.tableWidget.rowCount()
- # 根据行数做索引添加一列
- self.tableWidget.insertRow(row)
- # 创建列对象
- item1 = QTableWidgetItem(item.name)
- item1.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
- self.tableWidget.setItem(row, 0, item1)
- item2 = QTableWidgetItem(item.books)
- item2.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
- self.tableWidget.setItem(row, 1, item2)
- item3 = QTableWidgetItem(item.time1)
- item3.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
- self.tableWidget.setItem(row, 2, item3)
- item4 = QTableWidgetItem(item.time2)
- item4.setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
- self.tableWidget.setItem(row, 3, item4)
- def insert_expurgate(self):
- # 判断标题来进行修改或添加
- if self.title == "添加":
- self.insert()
- else:
- self.alter()
-
- # 窗体加载时调用
- def myInitWindow(self):
- # 单击保存按钮调用函数
- self.OK.clicked.connect(self.insert_expurgate)
- # 如果标题是修改
- if self.title == "修改":
- self.lineEdit_2.setText(self.tableWidget.selectedItems()[0].text())
- self.lineEdit.setText(self.tableWidget.selectedItems()[1].text()
- self.dateEdit.setDate(QDate.currentDate())
- self.dateEdit_2.setDate(QDate.currentDate().addDays(30))
- import sys
- from PyQt5.QtWidgets import QApplication, QMainWindow
- from untitled1 import *
-
-
- class ManagerWindow(QMainWindow):
- def closeEvent(self, event):
- result = QtWidgets.QMessageBox.question(self, "退出", "是否保存后退出?",
- QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No)
-
- if result == QtWidgets.QMessageBox.Yes:
- saveStudents()
- # 执行关闭功能
- event.accept()
-
-
- # 程序入口
- if __name__ == '__main__': # python模拟程序入口
- # 创建主窗体
- app = QApplication(sys.argv)
- # 设计的UI界面实体化
- ui = Ui_Dialog()
- # 创建主窗体对象,一个应用程序可以有多个窗体,但是一个窗体不能代表一个应用程序。
- MainWindow = ManagerWindow()
- # 把所有用到的控件化在主窗体上。
- ui.setupUi(MainWindow)
- # 设置窗体大小不能更改
- MainWindow.setFixedSize(MainWindow.width(), MainWindow.height())
- # 主窗体自己的宽 #主窗体自己的高
- # 显示主窗体
- MainWindow.show()
- sys.exit(app.exec_())
大家可能好奇QMessageBox函数,它的功能是产生一个提示框,在报错或者删除时弹出来提示。
- result = QMessageBox.question(self, "消息", "添加成功,是否接着添加",
- QMessageBox.Yes | QMessageBox.No)
-
- QMessageBox.information(self, "提示", "家人,咱这输入的不对,要不把空格去掉。", QMessageBox.Ok)
- # 设置窗体背景图片
- palette = QPalette()
- pix = QPixmap("项目图片/feb1fe93862d873eacf66dd4d82d307e.jpg")
- # # 自调背景图大小和窗体适应
- pix = pix.scaled(mainWindow.width(), mainWindow.height())
- palette.setBrush(QPalette.Background, QBrush(pix))
- mainWindow.setPalette(palette)
- # 设置搜索栏提示信息
- self.lineEdit.setPlaceholderText('请输入要查询的学生姓名……')
- # 控件半透明设置
- op = QtWidgets.QGraphicsOpacityEffect()
- # 0.7是控件的半透明程度
- op.setOpacity(0.7)
- self.lineEdit.setGraphicsEffect(op)
- self.lineEdit.setAutoFillBackground(True)
这个代码可以让日期控件上显示当前日期
- self.dateEdit.setDate(QDate.currentDate())
- # addDays是在原基础上增加的天数
- self.dateEdit_2.setDate(QDate.currentDate().addDays(30))
需要原码的可以到下面链接下载:
如果下载不了可以后台私信我,好本篇博客内容就到这里感谢您的观看,如果对您有帮助的话请留下你的赞。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。