pyqt
PyQt中文示例:学生信息管理系统
下面是一个使用PyQt5实现的中文学生信息管理系统界面。这个应用程序展示了如何创建中文界面、处理中文数据以及实现基本的数据管理功能。
import sys
from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout,
QLabel, QLineEdit, QPushButton, QTableWidget, QTableWidgetItem,
QHeaderView, QMessageBox, QComboBox, QFormLayout, QGroupBox)
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QFont, QColor
class StudentManagementSystem(QMainWindow):
def __init__(self):
super().__init__()
# 初始化学生数据
self.students = [
{"学号": "S001", "姓名": "张三", "性别": "男", "年龄": 20, "专业": "计算机科学", "成绩": 92.5},
{"学号": "S002", "姓名": "李四", "性别": "女", "年龄": 21, "专业": "软件工程", "成绩": 85.0},
{"学号": "S003", "姓名": "王五", "性别": "男", "年龄": 19, "专业": "人工智能", "成绩": 78.5}
]
# 设置主窗口
self.setWindowTitle("学生信息管理系统")
self.setGeometry(300, 200, 1000, 600)
# 设置全局字体 - 支持中文显示
font = QFont("Microsoft YaHei UI", 10)
QApplication.setFont(font)
# 创建主布局
main_widget = QWidget()
main_layout = QHBoxLayout()
main_widget.setLayout(main_layout)
self.setCentralWidget(main_widget)
# 左侧表单区域
form_group = QGroupBox("学生信息")
form_layout = QFormLayout()
form_group.setLayout(form_layout)
form_group.setFixedWidth(300)
# 创建表单控件
self.student_id = QLineEdit()
self.student_name = QLineEdit()
self.student_gender = QComboBox()
self.student_gender.addItems(["男", "女"])
self.student_age = QLineEdit()
self.student_major = QComboBox()
self.student_major.addItems(["计算机科学", "软件工程", "人工智能", "数据科学", "网络安全"])
self.student_grade = QLineEdit()
# 添加到表单布局
form_layout.addRow("学号:", self.student_id)
form_layout.addRow("姓名:", self.student_name)
form_layout.addRow("性别:", self.student_gender)
form_layout.addRow("年龄:", self.student_age)
form_layout.addRow("专业:", self.student_major)
form_layout.addRow("成绩:", self.student_grade)
# 按钮区域
button_layout = QHBoxLayout()
self.add_btn = QPushButton("添加学生")
self.update_btn = QPushButton("更新信息")
self.delete_btn = QPushButton("删除学生")
self.clear_btn = QPushButton("清空表单")
button_layout.addWidget(self.add_btn)
button_layout.addWidget(self.update_btn)
button_layout.addWidget(self.delete_btn)
button_layout.addWidget(self.clear_btn)
# 右侧表格区域
self.table = QTableWidget()
self.table.setColumnCount(6)
self.table.setHorizontalHeaderLabels(["学号", "姓名", "性别", "年龄", "专业", "成绩"])
self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
self.table.setSelectionBehavior(QTableWidget.SelectRows)
# 将表单和按钮添加到左侧垂直布局
left_layout = QVBoxLayout()
left_layout.addWidget(form_group)
left_layout.addLayout(button_layout)
left_layout.addStretch()
# 将左侧和表格添加到主布局
main_layout.addLayout(left_layout)
main_layout.addWidget(self.table)
# 连接信号与槽
self.add_btn.clicked.connect(self.add_student)
self.update_btn.clicked.connect(self.update_student)
self.delete_btn.clicked.connect(self.delete_student)
self.clear_btn.clicked.connect(self.clear_form)
self.table.itemSelectionChanged.connect(self.load_selected_student)
# 初始化表格数据
self.load_students_to_table()
# 设置样式
self.setStyleSheet("""
QMainWindow {
background-color: #f0f2f5;
}
QGroupBox {
border: 1px solid #dcdfe6;
border-radius: 5px;
margin-top: 1ex;
font-weight: bold;
background-color: white;
}
QGroupBox::title {
subcontrol-origin: margin;
left: 10px;
padding: 0 5px;
}
QTableWidget {
background-color: white;
border: 1px solid #dcdfe6;
border-radius: 5px;
gridline-color: #ebeef5;
font-size: 12px;
}
QHeaderView::section {
background-color: #f5f7fa;
padding: 6px;
border: 1px solid #dcdfe6;
font-weight: bold;
}
QPushButton {
background-color: #409eff;
color: white;
border: none;
border-radius: 4px;
padding: 8px 15px;
}
QPushButton:hover {
background-color: #66b1ff;
}
QPushButton:pressed {
background-color: #3a8ee6;
}
QLineEdit, QComboBox {
border: 1px solid #dcdfe6;
border-radius: 4px;
padding: 5px;
}
""")
def load_students_to_table(self):
"""加载学生数据到表格"""
self.table.setRowCount(len(self.students))
for i, student in enumerate(self.students):
self.table.setItem(i, 0, QTableWidgetItem(student["学号"]))
self.table.setItem(i, 1, QTableWidgetItem(student["姓名"]))
self.table.setItem(i, 2, QTableWidgetItem(student["性别"]))
self.table.setItem(i, 3, QTableWidgetItem(str(student["年龄"])))
self.table.setItem(i, 4, QTableWidgetItem(student["专业"]))
# 设置成绩项,根据成绩设置颜色
grade = student["成绩"]
grade_item = QTableWidgetItem(str(grade))
if grade >= 90:
grade_item.setForeground(QColor(0, 200, 0)) # 绿色
elif grade < 60:
grade_item.setForeground(QColor(255, 0, 0)) # 红色
self.table.setItem(i, 5, grade_item)
def load_selected_student(self):
"""将选中的学生信息加载到表单"""
selected_row = self.table.currentRow()
if selected_row >= 0:
student = self.students[selected_row]
self.student_id.setText(student["学号"])
self.student_name.setText(student["姓名"])
self.student_gender.setCurrentText(student["性别"])
self.student_age.setText(str(student["年龄"]))
self.student_major.setCurrentText(student["专业"])
self.student_grade.setText(str(student["成绩"]))
def validate_form(self):
"""验证表单输入是否有效"""
if not all([
self.student_id.text().strip(),
self.student_name.text().strip(),
self.student_age.text().strip(),
self.student_grade.text().strip()
]):
QMessageBox.warning(self, "输入错误", "所有字段都必须填写!")
return False
try:
age = int(self.student_age.text())
grade = float(self.student_grade.text())
if age <= 0 or age > 150:
QMessageBox.warning(self, "输入错误", "年龄必须在1-150之间!")
return False
if grade < 0 or grade > 100:
QMessageBox.warning(self, "输入错误", "成绩必须在0-100之间!")
return False
except ValueError:
QMessageBox.warning(self, "输入错误", "年龄必须是整数,成绩必须是数字!")
return False
return True
def add_student(self):
"""添加新学生"""
if not self.validate_form():
return
# 检查学号是否重复
student_id = self.student_id.text().strip()
if any(s["学号"] == student_id for s in self.students):
QMessageBox.warning(self, "添加失败", "该学号已存在!")
return
# 创建新学生
student = {
"学号": student_id,
"姓名": self.student_name.text().strip(),
"性别": self.student_gender.currentText(),
"年龄": int(self.student_age.text()),
"专业": self.student_major.currentText(),
"成绩": float(self.student_grade.text())
}
self.students.append(student)
self.load_students_to_table()
self.clear_form()
QMessageBox.information(self, "添加成功", "学生信息添加成功!")
def update_student(self):
"""更新学生信息"""
if not self.validate_form() or not self.table.currentItem():
return
selected_row = self.table.currentRow()
if selected_row < 0:
QMessageBox.warning(self, "更新失败", "请先选择一个学生!")
return
student_id = self.student_id.text().strip()
# 检查学号是否被修改为已存在的学号
if student_id != self.students[selected_row]["学号"]:
if any(s["学号"] == student_id for s in self.students):
QMessageBox.warning(self, "更新失败", "该学号已存在!")
return
# 更新学生信息
self.students[selected_row] = {
"学号": student_id,
"姓名": self.student_name.text().strip(),
"性别": self.student_gender.currentText(),
"年龄": int(self.student_age.text()),
"专业": self.student_major.currentText(),
"成绩": float(self.student_grade.text())
}
self.load_students_to_table()
QMessageBox.information(self, "更新成功", "学生信息更新成功!")
def delete_student(self):
"""删除学生"""
selected_row = self.table.currentRow()
if selected_row < 0:
QMessageBox.warning(self, "删除失败", "请先选择一个学生!")
return
reply = QMessageBox.question(self, "确认删除",
"确定要删除选中的学生吗?",
QMessageBox.Yes | QMessageBox.No)
if reply == QMessageBox.Yes:
self.students.pop(selected_row)
self.load_students_to_table()
self.clear_form()
def clear_form(self):
"""清空表单"""
self.student_id.clear()
self.student_name.clear()
self.student_gender.setCurrentIndex(0)
self.student_age.clear()
self.student_major.setCurrentIndex(0)
self.student_grade.clear()
self.table.clearSelection()
if __name__ == "__main__":
app = QApplication(sys.argv)
# 设置中文字体支持
app.setFont(QFont("Microsoft YaHei UI", 10))
window = StudentManagementSystem()
window.show()
sys.exit(app.exec_())
功能说明
这个学生信息管理系统实现了以下功能:
- 数据展示:使用表格展示所有学生信息
- 数据操作:
- 添加新学生
- 修改选中学生的信息
- 删除选中学生
- 清空表单
- 数据验证:
- 验证必填字段是否为空
- 验证年龄和成绩是否为有效数字
- 验证学号是否重复
界面特点
- 中文界面:所有界面元素都使用中文
- 响应式设计:左侧为表单区域,右侧为数据表格
- 视觉美化:
- 使用CSS样式美化界面
- 表格行根据成绩高低显示不同颜色
- 按钮有悬停和点击效果
- 用户体验:
- 选中表格行时自动加载数据到表单
- 操作有确认提示
- 输入错误时显示友好提示
使用说明
- 填写表单信息后点击"添加学生"添加新记录
- 点击表格中的某一行,该行数据会加载到表单中
- 修改表单内容后点击"更新信息"保存修改
- 选中某行后点击"删除学生"可删除该记录
- 点击"清空表单"可清除所有输入内容并取消选择
要运行此程序,您需要安装PyQt5:
pip install pyqt5 PYQT 应用程序框架及开发工具
大家好,本团队此次分享的内容为开发过程中使用到的PYQT 应用程序框架及开发工具。 pYqt 是一个多平台的 python 图形用户界面应用程序框架,由于其面向对象、 易扩展(可实现组件编程等
使用PyQt5自动初始化OpenVINO™环境出现报错怎么解决?
编写了一个程序以使用 PyQt5 自动初始化OpenVINO™环境:从 PyQt5 导入 QtWidgets 导入操作系统 #import时间 导入系统 如果__name__
基于PyQT5与ONNXRUNTIME实现风格迁移应用
2023年一月份跟二月份创建了一个PyQT5人工智能软件开发系列的文章系列,过去的两个月都没怎么更新,心里一直想有时间继续更新下去,今天又更新了一篇,基于PyQT5实现多线程、界面化、风格迁移模型的实时推理。
2023-10-25 10:35:54
PYQT5自动化上位机开发记录
记录使用PYQT5快速开发生产工具使用python开发用于wafer切割系统控制部分 文章简介 项目简介 控制框图 DEMO展示 基础环境搭建 因其他原因停止更新使用python开发用于wafer
资料下载
李玉鑫
2023-05-11 18:25:43
PyQT开发上位机教程
,两个都需要安装,需要记住安装的位置,一会儿需要设置环境变量。 pip install PyQt5pip install PyQt5 - tools ( DemoProject )E : \WorkSp
资料下载
卓侨汉
2023-05-08 09:59:15
MAC-OS-X-下用py2app打包PYQT程序
MAC-OS-X-下用py2app打包PYQT程序(茂硕电源技术参数)-该文档为MAC-OS-X-下用py2app打包PYQT程序讲解教程,是份不错的参考资料,感兴趣的可以下载看看,,,,,,,,,,,,,,,,,,
资料下载
479809
2021-09-24 15:33:02
PyQt5的中文教程电子书免费下载
本教程的目的是带领你入门PyQt5。教程内所有代码都在Linux上测试通过。PyQt4 教程是PyQt4的教程,
资料下载
林培阳
2020-08-06 08:00:00
鲁班猫0 ubuntu20 解决python3.10安装pyqt5
前面用pip install pyqt5,总是安装不成功。经查阅资料,最后用:udo apt install python3-pyqt5成功安装cat@lubancat:~$
OpenCV+PyQT5开发桌面应用几个重要的坑与解决
大概去年八月份的时候,我打算用OpenCV+PyQT5开发一套OpenCV教学演示与快速验证桌面软件,说实话那个时候我对PyQT5的理解就是Hello World水平。经过一年多开发锤炼,不断实践
2022-12-13 11:55:42
ROC-RK3588S-PC_Ubuntu20.04固件使用pyqt5异常是何原因
问题描述及复现步骤:使用sudo apt install python3-pyqt5* -y安装完毕后,引用QtGui的时候报错了有碰到同款错误的吗?你们怎么解决的?
PyQT5+OpenCV开发的应用如何打包发布?
我自己用PyQT5写了一个应用程序,基本上都写好了,到了打包发布这个环节,我知道的有两个工具可以帮我打包分别是。
2022-10-25 09:40:34
PyQT多线程正确的调用方式
我这两天一直想把YOLOv5上加个训练的界面,把控制台的输出重定向到一个PyQT5写的界面上,然后我很顺序的写好了一个简单的测试,发现可以重定向了,一直实时获取输出了。
2022-08-29 10:24:10
如何使用Python配合PyQT5模块来开发图形化应用程序
By Toradex秦海1).简介随着Python在互联网人工智能领域的流行,大家也慢慢感受到Python开发的便利,本文就基于嵌入式ARM平台,介绍使用Python配合PyQT5模块来开发图形化
利用PyQt5编辑软件界面的简单步骤
的操作以及利用PyQt5编辑软件界面的简单步骤。实现难度不大,但需要运行第二线程运行输出脉冲的程序。 首先,推荐一下PyQt5和Eric6的学习资料...
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- dtmb信号覆盖城市查询
- EDA是什么?有什么作用?
- 中科院研发成功2nm光刻机
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 如何进行编码器的正确接线?接线方法介绍
- 什么是场效应管?它的作用是什么?
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- amoled屏幕和oled区别
- 苹果nfc功能怎么复制门禁卡
- 单片机和嵌入式的区别是什么
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 苹果笔记本macbookpro18款与19款区别
- 通讯隔离作用
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机