基于PyQt5连接本地SQLite实现简单人力资源管理系统

news2024/11/26 0:36:20

人力资源管理系统

使用环境:Python3.86 + PyQt5.15.4 + sqlite3

记录一下最近学校举办的一个程序设计比赛,题目是实现一个简单的人力资源管理系统,文末有效果展示

在这里插入图片描述

我认为程序是面向人类而不是面向机器的,所以我使用了PyQt5封装了一个较好的界面,对相应的控件套用了一些基础的QSS样式,以达到基本的界面美化

界面GUI

在这里插入图片描述

/* Button按钮控件使用的样式 */
button_style = 'QPushButton{' \
               'font: 10pt "微软雅黑";' \
               'color: #2f3640;' \
               'background-color: #f5f6fa;' \
               'border-color: #2f3640;' \
               'border-radius: 15px;' \
               'border-style: solid;' \
               'border-width: 2px;' \
               'padding: 5px;}' \
               'QPushButton:hover{' \
               'color: #FFFFFF;' \
               'background-color: #718093;' \
               'border-color: #2f3640;}' \
               'QPushButton:pressed,checked{' \
               'color: #FFFFFF;' \
               'background-color:qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 #273c75, stop:1 #487eb0);}' \
               'QPushButton:disabled{' \
               'color: #FFFFFF;' \
               'background-color: #dcdde1;' \
               'border-color: #dcdde1;}'

/* TableWidget控件中删除按钮控件使用的样式 */
delButton_style = 'QPushButton{' \
               'font: 10pt "微软雅黑";' \
               'color: #2f3640;' \
               'background-color: #f5f6fa;' \
               'border-color: #2f3640;' \
               'border-radius: 15px;' \
               'border-style: solid;' \
               'border-width: 2px;' \
               'padding: 5px;}' \
               'QPushButton:hover{' \
               'color: red;' \
               'background-color: #718093;' \
               'border-color: #2f3640;}' \
               'QPushButton:pressed,checked{' \
               'color: #FFFFFF;' \
               'background-color:qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 #273c75, stop:1 #487eb0);}' \
               'QPushButton:disabled{' \
               'color: #FFFFFF;' \
               'background-color: #dcdde1;' \
               'border-color: #dcdde1;}'

line_style = 'border:2px groove;border-radius:10px;padding:2px 4px;background-color: #F2F0EE '  /* lineEdit文本框控件使用的样式 */
comboBox_style='border:2px groove;border-radius:0px;padding:2px 4px;background-color: #F2F0EE ' /* comboBox下拉框控件使用的样式 */
title_style = 'font-family: 等线;font-weight:400;font-size:48px;line-height:14px;text-align:center;color:rgb(0, 0, 84);'  /* 标题Label文本控件使用的样式 */
label_style = 'font-family: 等线;font-weight:10;font-size:16px;line-height:14px;text-align:center;color:rgb(0, 0, 84);'  /* 文本框控件使用的样式 */

一些比较关键的代码的解析

数据库相关

在本地中创建了一个数据库名为moreMess.db,一共有6个字段

在这里插入图片描述

多窗口之间的信息传递(跨窗体传递信号)

在点击“修改密码”后,会显示“修改密码”子窗体,在修改完子窗体密码后,需要在父窗体(用户系统)的状态栏中显示”修改信息成功“,这就涉及到了跨窗体之间的传递信号

请添加图片描述

关键步骤:

  • 子窗体中定义信号,在类函数外定义信号

    _signal = QtCore.pyqtSignal( Type ) Type:str int list等

  • 子窗体中选择发送时机,发送信号

    self._signal.emit( Mess ) Mess:发送的数据(类型需和定义信号时声明的类型一致)

  • 父窗体中连接信号

    self.XXX = ChildClass ChildClass:定义好的子类 XXX:实例名

    self.XXX._signal.connect(self.appendTextEdit) XXX:实例名

from PyQt5 import QtCore  # 导入关键库

# 用户界面
class UserSystem(QMainWindow, Ui_user):
    def __init__(self, nameTxt):
        self.pushButton_password.clicked.connect(self.changePassword)  # [修改密码]按钮
        pass
    
    def changePassword(self):
        """
        [修改密码]按钮槽函数
        :return: None
        """
        self.changeWin = ChangePassword(self.nameTxt)  # 实例化子窗口
        self.changeWin.show()  # 展示子窗口
        self.changeWin._signal.connect(self.appendTextEdit)  # 连接信号


# 修改密码子窗口
class ChangePassword(QMainWindow, Ui_change):
    _signal = QtCore.pyqtSignal(str)  # 定义信号,str代表传递的是字符串数据
    def __init__(self,nameTxt):
        self.pushButton.clicked.connect(self.changePwd)  # 连接槽函数
        pass
    def changePwd(self):
        pwd_frist = self.lineEdit_first.text()  # 获取文本框
        pwd_second = self.lineEdit_second.text()  # 获取文本框
        if pwd_frist != pwd_second:
           otherFuc.MessageBox("错误", "两次输入的密码不一致")
           self.lineEdit_first.clear()   # 清除"请输入密码"文本框内容
           self.lineEdit_second.clear()  # 清除"请再次输入"文本框内容
        else:
           sqlite.update(self.nameTxt, {"password": self.lineEdit_first.text()})  # 更新数据库对应账户密码
           self._signal.emit(otherFuc.PrintTime("修改密码成功!"))   # 发送信号
           self.close()  # 关闭子窗口

tableWidget控件单元格内容的获取

在获取到用户的填报信息后,在tableWidget中显示对应数据,在下一步的代码编写中,遇到两个问题,一个是如何获取单元格文本,一个是如何判断是[编辑信息]按钮单击还是[删除]按钮单击,是哪一行的按钮被单击?
在这里插入图片描述

问题1:获取单元格的文本

name = self.tableWidget.item(0, 0).text()  # 获取所在行的用户姓名
# row行 col列 类似于Excel(0,0)  如上图:name=wtuz4md2z1

问题2:判断按钮的单击

def onclick(self):
    """
     按钮单击事件:通过判断所点击按钮的文本来执行对应操作
     :return: None
    """
    button = self.sender()  # 获取控件名称
    if button:
        row = self.tableWidget.indexAt(button.pos()).row()  # 获取空间当前所在行
        txt=self.delButtonList[row].text()  # 获取当前单击的控件文本
        ...

其他的代码就不做过多描述了,感兴趣的可以自行下载,不需要积分

在这里插入图片描述

效果展示

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/534316.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringCloud源码分析 (Eureka-Server-处理客户端续约请求) (七)

文章目录 1.处理客户端续约请求1.1 InstanceResource.renewLease()1.2 InstanceRegistry.renew()1.3 PeerAwareInstanceRegistryImpl.renew()1.4 AbstractInstanceRegistry.renew()1.6 PeerAwareInstanceRegistryImpl.replicateToPeers()1.7 PeerEurekaNode.headbeat() 1.处理客…

大数据Doris(二十二):Rollup物化索引创建与操作

文章目录 Rollup物化索引创建与操作 一、创建测试表 二、创建Rollup物化索引表

岗位少,竞争激烈,这是今年软件测试就业的真实写照,也是所有岗位的真实写照。

前两天跟一个HR朋友聊天,她表示刚在boss上发布了一个普通测试岗位,不到一小时竟然收到了几百份简历。而且简历质量极高,这是往年不敢想象的。岗位少,竞争激烈,这是今年软件测试就业的真实写照,也是所有岗位…

若依框架快速开发项目(避坑超详细)

若依框架快速开发项目(避坑超详细) 初衷: 若依框架使用及其普遍,是一个非常优秀的开源框架,框架本身的权限系统,字典设置以及相关封装,安全拦截相当完善,本人受益匪浅,学…

Python进阶实际应用开发实战(一)

目录 原型设计和环境环境设置创建新项目 原型设计和环境 原书第一章内容 环境设置 对于一个项目我们需要安装库并管理依赖项,这意味着需要有一个虚拟环境。我们使用pipenv来指定依赖项。 python -m pip install --user pipenv在命令行中启动Python脚本的时候&am…

分布式锁概念

什么是分布式锁 方案一:SETNX EXPIRE 方案二:SETNX value值是(系统时间过期时间) 方案三:使用Lua脚本(包含SETNX EXPIRE两条指令) 方案四:SET的扩展命令(SET EX PX NX) 方案五…

chatgpt赋能Python-aidlearning安装pycharm

Aid Learning: 如何安装PyCharm PyCharm是一款由JetBrains开发的用于Python编程的集成开发环境(IDE)。它提供了丰富的编辑器和调试工具,可以帮助开发者更高效地编写Python代码。本文将介绍如何安装PyCharm。 安装前准备工作 在安装PyCharm…

vue diff算法与虚拟dom知识整理(8) 手写patch实现简易版的节点第一次上dom树

上一文 我们整理了一下 patch 函数的整体过程 我不知道大家有没有保留我们之前学手写H函数时的那个案例 我们要将index.jsi还原成这样 参考代码如下 import h from "./snabbdom/h";const dom1 h("div",{props: {class: "dom"} },"文本测试…

Qt QJson 使用

文章目录 1. 简介2. 简单实例3. 结果 1. 简介 QJson 是一个用于 Qt 应用程序的 JSON 解析和生成库。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,具有良好的可读性和可扩展性,常用于 Web 应用程序中。QJson 将 …

Python通过natcap.invest库调用InVEST模型批处理数据(Carbon Storage and Sequestration模块)

InVEST(Integrated Valuation of Ecosystem Servicesand Tradeoffs)生态系统服务和权衡的综合评估模型,旨在通过模拟不同土地覆被情景下生态系统物质量和价值量的变化。它提供了多种生态系统服务功能评估,包括了淡水生态系统评估、…

Liunx压缩命令 - gz

gz命令详解及使用 Linux中gz命令的全称是gzip,它是一种常用的压缩程序,可将文件或目录压缩为.gz格式,以节省存储空间,同时也可以通过解压缩操作重新获取原始文件掌握 gzip 命令,可以帮助我们更加高效地进行文件压缩与…

视频编码测试平台CodecWar

​在视频编码的研究和开发中,我们经常需要对编码器的性能进行比较,一般的做法是构建一个数据集,然后将两个编码器在同一个配置上(LD,RA,AI等)使用不同参数(CQP下一般为4个QP值)编码,…

Py之pymc:pymc的简介、安装、使用方法之详细攻略

Py之pymc:pymc的简介、安装、使用方法之详细攻略 目录 pymc的简介 pymc的安装 pymc的使用方法 1、时序性任务 (1)、使用 Euler-Maruyama 方案推断 SDE 的参数 pymc的简介 PyMC(以前称为PyMC3)是一个专注于高级马尔科夫链蒙特卡洛&#x…

⑤电子产品拆解分析-人体感应灯

⑤电子产品拆解分析-人体感应灯 一、功能介绍二、电路分析以及器件作用三、原理图复现与学习 一、功能介绍 ①感应人体活动亮灯20S;②Micro-USB进行锂电池充电; 二、电路分析以及器件作用 三、原理图复现与学习 R1为下拉电阻,防止上电因芯…

功率放大器的选型原则和方法是什么

功率放大器是一种能够将低电平信号放大到足够高的电平以驱动负载的电子器件。在各种电子设备中,功率放大器被广泛应用,如音响系统、电视广播、汽车音响、射频通信等。因此,正确选型功率放大器非常重要,可以提高设备的性能和可靠性…

Web3的应用及发展

Web3兼具去中心化和交互性,打造了一个全新的互联网模式。在其中,用户可以绕过中介直接交互。dApp用户无需许可即可访问金融工具,以点对点的方式交易加密资产,获得参数型保险理赔,通过NFT交易可验证所有权的数字艺术品&…

[网鼎杯 2020 青龙组]bang 复现

一.前言 在NSSCTF练习安卓逆向,第一次遇到安卓脱壳题 大佬的题解只有一句话"frida-dexdump一把嗦" 听起来容易做起来难,还遇到了安卓虚拟机的玄学bug,折磨了我很久,好在最终使用真机成功dump并得到flag 题目来源:[网鼎杯 2020 青龙组]bang 如果直接用jadx打开会发现…

Vector - CAPL - CANoe DBC消息相关自动化_01

目录 getFirstCANdbFilename -- 获取数据库的文件名 代码示例 getFirstCANdbName -- 获取数据库的名称 代码示例 getSignalName -- 获取报文的信号名称 getMessageAttrInt -- 获取信号属性值 代码示例 getFirstCANdbFilename -- 获取数据库的文件名 功能:找出…

Python: 结合多进程和 Asyncio 以提高性能

动动发财的小手,点个赞吧! 简介 多亏了 GIL,使用多个线程来执行 CPU 密集型任务从来都不是一种选择。随着多核 CPU 的普及,Python 提供了一种多处理解决方案来执行 CPU 密集型任务。但是直到现在,直接使用多进程相关的…