PYQT5+MYSQL+数据库+QTableWidget+QMessageBox+QDialog+右键菜单写的小程序分享一下

提前声明:我自己也是个小白,才开始学习的,代码书写也较杂乱无章,将就着看吧,有什么不懂的问题可以留言提出来,我能解答就解答,还有项目还在开发中,很多功能没有完善,大家先按已有的功能参考一下。之前我想录个gif图片来着,可惜工具不太给力,随便录制一下就超过5M了上传不了,我就图文给大家解释一下吧,我是做ETL开发的,闲着就自己学习一下写个调度工具,大家交流一下,希望给予支持,拜谢!

一、环境

python : 

PYQT5其他环境: 

主要看红框里面的就行。

数据库:我用的mysql  数据库我试过使用最新的,发现环境有问题,所以就试了这一版,发现可以用,如果真要生产使用,我至少会用oracle的

 

环境就上面这些吧,我会把表结构文件的ddl放到一个文件里的,好让大家搭建好环境,直接把项目丢进去就能运行。

数据库配置文件在unit目录下的dbconf.ini来配置,需要注意的是要安装 mysql-connector

二、功能演示

1、run.py 直接运行,就是下面图片:

 

直接点击登录或者取消,其他功能逻辑都没有做,跳转后是主页面

 

主页功能解释:

①文件菜单主要就一个新增作业功能,点击后是

②选择系统没有做(目前还没有确定业务具体情况保留功能),刷新和自动刷新(自动刷新可以选择刷新秒数)都做了。

③就是个作业一览展示,点击具体格子会在下面显示里面具体的作业

④搜索功能,如果下面有搜到关键词,会直接定位到单元格,如果没有就去后台作业表中查找

⑤右键菜单里面

1、作业详情里面可以修改保存作业

2、作业修改同上,只是直接修改

3、增加依赖也作业,可以批量添加,还可以下拉选择,以及联想。

⑥就只有默认选择,其他没有做。

好了上面就是主要功能,里面还有很多小细节功能,大家细细体会,其他东西我会慢慢晚上的,希望大家支持,谢谢!

资源地址:https://download.youkuaiyun.com/download/asliuyajun/12041375

好的,下面是一个简单的学生成绩管理的增删改查功能的代码示例,主要使用了 Python 3、PyQt5 和 pyodbc 模块。 请注意,此代码示例仅供参考,实际使用时需要根据具体需求进行修改。 ```python import sys import pyodbc from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox, QTableWidgetItem from PyQt5.QtCore import Qt class ScoreManagementSystem(QMainWindow): def __init__(self): super().__init__() # 初始化界面和数据库连接 self.init_ui() self.init_db() def init_ui(self): # 创建界面控件 self.table = QTableWidget(self) self.add_button = QPushButton("添加", self) self.delete_button = QPushButton("删除", self) self.modify_button = QPushButton("修改", self) self.search_button = QPushButton("查询", self) # 设置控件位置和大小 self.table.setGeometry(10, 10, 580, 380) self.add_button.setGeometry(10, 400, 70, 30) self.delete_button.setGeometry(90, 400, 70, 30) self.modify_button.setGeometry(170, 400, 70, 30) self.search_button.setGeometry(250, 400, 70, 30) # 设置表格列数和列名 self.table.setColumnCount(4) self.table.setHorizontalHeaderLabels(["学号", "姓名", "课程名", "成绩"]) # 设置界面标题和大小 self.setWindowTitle("学生成绩管理系统") self.setGeometry(100, 100, 600, 450) # 绑定按钮点击事件 self.add_button.clicked.connect(self.add_score) self.delete_button.clicked.connect(self.delete_score) self.modify_button.clicked.connect(self.modify_score) self.search_button.clicked.connect(self.search_score) def init_db(self): # 连接 SQL Server 数据库 self.conn = pyodbc.connect('DRIVER={SQL Server};SERVER=127.0.0.1;DATABASE=scoredb;UID=sa;PWD=123456') self.cursor = self.conn.cursor() def add_score(self): # 打开添加成绩对话框 add_dialog = AddScoreDialog() if add_dialog.exec_() == QDialog.Accepted: # 获取添加成绩对话框中的数据 student_id = add_dialog.student_id_edit.text() student_name = add_dialog.student_name_edit.text() course_name = add_dialog.course_name_edit.text() score = add_dialog.score_edit.text() # 插入数据到数据库中 self.cursor.execute("INSERT INTO scores (student_id, student_name, course_name, score) VALUES (?, ?, ?, ?)", (student_id, student_name, course_name, score)) self.conn.commit() # 在表格中显示新添加的数据 row_count = self.table.rowCount() self.table.insertRow(row_count) self.table.setItem(row_count, 0, QTableWidgetItem(student_id)) self.table.setItem(row_count, 1, QTableWidgetItem(student_name)) self.table.setItem(row_count, 2, QTableWidgetItem(course_name)) self.table.setItem(row_count, 3, QTableWidgetItem(score)) def delete_score(self): # 获取选中的行数 selected_rows = self.table.selectionModel().selectedRows() if len(selected_rows) == 0: QMessageBox.warning(self, "警告", "请先选中要删除的行!") return reply = QMessageBox.question(self, "确认", "确定要删除选中的行吗?", QMessageBox.Yes | QMessageBox.No) if reply == QMessageBox.Yes: # 从数据库中删除选中的数据 for row in selected_rows: student_id = self.table.item(row.row(), 0).text() self.cursor.execute("DELETE FROM scores WHERE student_id=?", (student_id,)) self.conn.commit() # 从表格中删除选中的行 for row in reversed(selected_rows): self.table.removeRow(row.row()) def modify_score(self): # 获取选中的行数 selected_rows = self.table.selectionModel().selectedRows() if len(selected_rows) != 1: QMessageBox.warning(self, "警告", "请选择一行要修改的数据!") return # 打开修改成绩对话框,并将选中数据显示在对话框中 modify_dialog = ModifyScoreDialog() modify_dialog.student_id_edit.setText(self.table.item(selected_rows[0].row(), 0).text()) modify_dialog.student_name_edit.setText(self.table.item(selected_rows[0].row(), 1).text()) modify_dialog.course_name_edit.setText(self.table.item(selected_rows[0].row(), 2).text()) modify_dialog.score_edit.setText(self.table.item(selected_rows[0].row(), 3).text()) if modify_dialog.exec_() == QDialog.Accepted: # 获取修改成绩对话框中的数据 student_id = modify_dialog.student_id_edit.text() student_name = modify_dialog.student_name_edit.text() course_name = modify_dialog.course_name_edit.text() score = modify_dialog.score_edit.text() # 更新数据库中的数据 self.cursor.execute("UPDATE scores SET student_name=?, course_name=?, score=? WHERE student_id=?", (student_name, course_name, score, student_id)) self.conn.commit() # 更新表格中的数据 self.table.setItem(selected_rows[0].row(), 1, QTableWidgetItem(student_name)) self.table.setItem(selected_rows[0].row(), 2, QTableWidgetItem(course_name)) self.table.setItem(selected_rows[0].row(), 3, QTableWidgetItem(score)) def search_score(self): # 打开查询成绩对话框 search_dialog = SearchScoreDialog() if search_dialog.exec_() == QDialog.Accepted: # 获取查询成绩对话框中的数据 student_id = search_dialog.student_id_edit.text() course_name = search_dialog.course_name_edit.text() # 查询数据库中的数据 self.cursor.execute("SELECT * FROM scores WHERE student_id=? OR course_name=?", (student_id, course_name)) result = self.cursor.fetchall() # 在表格中显示查询结果 self.table.setRowCount(0) for row in result: row_count = self.table.rowCount() self.table.insertRow(row_count) self.table.setItem(row_count, 0, QTableWidgetItem(row[0])) self.table.setItem(row_count, 1, QTableWidgetItem(row[1])) self.table.setItem(row_count, 2, QTableWidgetItem(row[2])) self.table.setItem(row_count, 3, QTableWidgetItem(str(row[3]))) class AddScoreDialog(QDialog): def __init__(self): super().__init__() # 创建添加成绩对话框控件 self.student_id_label = QLabel("学号:", self) self.student_id_edit = QLineEdit(self) self.student_name_label = QLabel("姓名:", self) self.student_name_edit = QLineEdit(self) self.course_name_label = QLabel("课程名:", self) self.course_name_edit = QLineEdit(self) self.score_label = QLabel("成绩:", self) self.score_edit = QLineEdit(self) self.ok_button = QPushButton("确定", self) self.cancel_button = QPushButton("取消", self) # 设置控件位置和大小 self.student_id_label.setGeometry(10, 10, 60, 20) self.student_id_edit.setGeometry(80, 10, 100, 20) self.student_name_label.setGeometry(190, 10, 60, 20) self.student_name_edit.setGeometry(260, 10, 100, 20) self.course_name_label.setGeometry(370, 10, 60, 20) self.course_name_edit.setGeometry(440, 10, 100, 20) self.score_label.setGeometry(10, 40, 60, 20) self.score_edit.setGeometry(80, 40, 100, 20) self.ok_button.setGeometry(100, 80, 70, 30) self.cancel_button.setGeometry(180, 80, 70, 30) # 设置对话框标题和大小 self.setWindowTitle("添加成绩") self.setGeometry(100, 100, 560, 120) # 绑定按钮点击事件 self.ok_button.clicked.connect(self.accept) self.cancel_button.clicked.connect(self.reject) class ModifyScoreDialog(QDialog): def __init__(self): super().__init__() # 创建修改成绩对话框控件 self.student_id_label = QLabel("学号:", self) self.student_id_edit = QLineEdit(self) self.student_name_label = QLabel("姓名:", self) self.student_name_edit = QLineEdit(self) self.course_name_label = QLabel("课程名:", self) self.course_name_edit = QLineEdit(self) self.score_label = QLabel("成绩:", self) self.score_edit = QLineEdit(self) self.ok_button = QPushButton("确定", self) self.cancel_button = QPushButton("取消", self) # 设置控件位置和大小 self.student_id_label.setGeometry(10, 10, 60, 20) self.student_id_edit.setGeometry(80, 10, 100, 20) self.student_name_label.setGeometry(190, 10, 60, 20) self.student_name_edit.setGeometry(260, 10, 100, 20) self.course_name_label.setGeometry(370, 10, 60, 20) self.course_name_edit.setGeometry(440, 10, 100, 20) self.score_label.setGeometry(10, 40, 60, 20) self.score_edit.setGeometry(80, 40, 100, 20) self.ok_button.setGeometry(100, 80, 70, 30) self.cancel_button.setGeometry(180, 80, 70, 30) # 设置对话框标题和大小 self.setWindowTitle("修改成绩") self.setGeometry(100, 100, 560, 120) # 绑定按钮点击事件 self.ok_button.clicked.connect(self.accept) self.cancel_button.clicked.connect(self.reject) class SearchScoreDialog(QDialog): def __init__(self): super().__init__() # 创建查询成绩对话框控件 self.student_id_label = QLabel("学号:", self) self.student_id_edit = QLineEdit(self) self.course_name_label = QLabel("课程名:", self) self.course_name_edit = QLineEdit(self) self.ok_button = QPushButton("确定", self) self.cancel_button = QPushButton("取消", self) # 设置控件位置和大小 self.student_id_label.setGeometry(10, 10, 60, 20) self.student_id_edit.setGeometry(80, 10, 100, 20) self.course_name_label.setGeometry(190, 10, 60, 20) self.course_name_edit.setGeometry(260, 10, 100, 20) self.ok_button.setGeometry(100, 40, 70, 30) self.cancel_button.setGeometry(180, 40, 70, 30) # 设置对话框标题和大小 self.setWindowTitle("查询成绩") self.setGeometry(100, 100, 380, 80) # 绑定按钮点击事件 self.ok_button.clicked.connect(self.accept) self.cancel_button.clicked.connect(self.reject) # 连接 SQL Server 数据库 conn = pyodbc.connect('DRIVER={SQL Server};SERVER=127.0.0.1;DATABASE=scoredb;UID=sa;PWD=123456') cursor = conn.cursor() # 创建 scores 表格 cursor.execute("IF NOT EXISTS (SELECT * FROM sysobjects WHERE name='scores' AND xtype='U') CREATE TABLE scores (student_id VARCHAR(20) PRIMARY KEY, student_name VARCHAR(50), course_name VARCHAR(50), score FLOAT)") conn.commit() # 查询 scores 表格中的数据,并在表格中显示 cursor.execute("SELECT * FROM scores") result = cursor.fetchall() app = QApplication(sys.argv) score_management_system = ScoreManagementSystem() score_management_system.show() for row in result: row_count = score_management_system.table.rowCount() score_management_system.table.insertRow(row_count) score_management_system.table.setItem(row_count, 0, QTableWidgetItem(row[0])) score_management_system.table.setItem(row_count, 1, QTableWidgetItem(row[1])) score_management_system.table.setItem(row_count, 2, QTableWidgetItem(row[2])) score_management_system.table.setItem(row_count, 3, QTableWidgetItem(str(row[3]))) sys.exit(app.exec_()) ``` 在运行此代码之前,需要先将 SQL Server 中的数据库和表格创建好,并将连接字符串中的服务器地址、数据库名称、用户名和密码修改为实际值。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值