求问如何用pyqt设计一个学生信息登记与查询系统,系统有两个页面,一个是信息登记页面,一个是信息查询页面,两个页面用选项卡QTabWidget形式切换。在登记页面录入学生的姓名、学号,在信息查询页面中,通过学生姓名来检索学生的学号,比如输入“张”,可以看到姓“张”的所有学生学号信息,若输入“张朝阳”,则只看到他的学号信息,信息查询页面中,若鼠标右键单击某一学生信息时,会出现快捷菜单,菜单上有删除命令按钮,点击按钮,该学生的信息被删除
3条回答 默认 最新
- CSDN专家-sinJack 2023-04-01 17:23关注
import sys from PyQt5.QtWidgets import QApplication, QWidget, QTabWidget, QLabel, QLineEdit, QListWidget, QListWidgetItem, \ QHBoxLayout, QVBoxLayout, QAction, QMenu class Student: def __init__(self, name, id): self.name = name self.id = id class RegisterWidget(QWidget): def __init__(self): super().__init__() nameLabel = QLabel("姓名:") self.nameEdit = QLineEdit() idLabel = QLabel("学号:") self.idEdit = QLineEdit() hbox1 = QHBoxLayout() hbox1.addWidget(nameLabel) hbox1.addWidget(self.nameEdit) hbox2 = QHBoxLayout() hbox2.addWidget(idLabel) hbox2.addWidget(self.idEdit) vbox = QVBoxLayout() vbox.addLayout(hbox1) vbox.addLayout(hbox2) self.setLayout(vbox) def clear(self): self.nameEdit.clear() self.idEdit.clear() class SearchWidget(QWidget): def __init__(self, students): super().__init__() self.students = students self.resultList = QListWidget() nameLabel = QLabel("姓名:") self.nameEdit = QLineEdit() self.nameEdit.textChanged.connect(self.search) hbox = QHBoxLayout() hbox.addWidget(nameLabel) hbox.addWidget(self.nameEdit) vbox = QVBoxLayout() vbox.addLayout(hbox) vbox.addWidget(self.resultList) self.setLayout(vbox) def search(self): self.resultList.clear() name = self.nameEdit.text() for student in self.students: if name in student.name: item = QListWidgetItem(student.id) item.setData(1, student) self.resultList.addItem(item) def contextMenuEvent(self, event): item = self.resultList.itemAt(event.pos()) if not item: return menu = QMenu(self) deleteAction = QAction("删除", self) deleteAction.triggered.connect(lambda: self.deleteStudent(item)) menu.addAction(deleteAction) menu.exec(event.globalPos()) def deleteStudent(self, item): student = item.data(1) self.students.remove(student) self.resultList.takeItem(self.resultList.row(item)) class MainWindow(QWidget): def __init__(self): super().__init__() self.students = [] self.tabWidget = QTabWidget() self.registerWidget = RegisterWidget() self.tabWidget.addTab(self.registerWidget, "信息登记") self.tabWidget.currentChanged.connect(self.clearRegister) self.searchWidget = SearchWidget(self.students) self.tabWidget.addTab(self.searchWidget, "信息查询") vbox = QVBoxLayout() vbox.addWidget(self.tabWidget) self.setLayout(vbox) def clearRegister(self): if self.tabWidget.currentIndex() == 0: self.registerWidget.clear() def addStudent(self): name = self.registerWidget.nameEdit.text() id = self.registerWidget.idEdit.text() student = Student(name, id) self.students.append(student) self.searchWidget.search() self.clearRegister() app = QApplication(sys.argv) window = MainWindow() window.setGeometry(300, 300, 400, 300) window.show() sys.exit(app.exec_())
定义了一个Student类,用来存储每个学生的信息。
RegisterWidget和SearchWidget类分别对应信息登记页面和信息查询页面,它们都继承自QWidget类。RegisterWidget中包含两个QLineEdit控件,用来录入学生的姓名和学号。SearchWidget中包含一个QLineEdit控件和一个QListWidget控件,用来输入姓名和显示查询结果。SearchWidget还重写了contextMenuEvent函数,用于处理右键单击事件,弹出快捷菜单。注意,我们在QListWidgetItem上设置了自定义数据,用于存储对应的Student对象,这样在删除学生的时候就可以直接从students列表中删除了。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 安装opengauss数据库报错
- ¥15 【急】在线问答CNC雕刻机的电子电路与编程
- ¥60 在mc68335芯片上移植ucos ii 的成功工程文件
- ¥15 笔记本外接显示器正常,但是笔记本屏幕黑屏
- ¥15 Python pandas
- ¥15 蓝牙硬件,可以用哪几种方法控制手机点击和滑动
- ¥15 生物医学数据分析。基础课程就v经常唱课程舅成牛逼
- ¥15 云环境云开发云函数对接微信商户中的分账功能
- ¥15 空间转录组CRAD遇到问题
- ¥20 materialstudio计算氢键脚本问题