python:人员管理2.0

本文介绍了Python人员管理系统的升级版,增加了岗位大小颜色设置、物品借阅管理、在位统计等功能。用户可调整岗位,分配人员,并进行数据保存与读取操作。完整代码附带,便于学习和参考。
摘要由CSDN通过智能技术生成

一简介

更新了之前做的

CSDNhttps://mp.csdn.net/mp_blog/creation/editor/128358046

之前的功能

1创建一个岗位管理界面,点击岗位管理之后,设置好岗位名称,拖动鼠标画框,完成岗位创建,之后里面可以放置人员。  可删除
2新增人员,包括(身份信息用不同颜色表示,岗位信息代表处于何种岗位)
3人员可以拖动到任意岗位,岗位也可以拖动到任意位置
4保存和读取功能 

新增功能

1,可以设置岗位的大小和颜色

2.可以增减借阅的物品、图标、在位等信息并显示

3.增加统计在位功能

二示例

 三,代码

这次吧BUTTON.py直接放到一起了,方便读取。来回引用总是circle import#循环引用。会报错

其他界面为ui生成,暂且不表

# -*- coding:utf-8 -*-
import ast  # 文本转字典
import os
import sys

from PyQt5 import QtWidgets
from PyQt5.QtCore import Qt, QRect, QMimeData
from PyQt5.QtGui import QPainter, QPen, QIcon, QDrag, QColor
from PyQt5.QtWidgets import QMainWindow, QVBoxLayout, QColorDialog, QPushButton, QFileDialog
from PyQt5.QtWidgets import QWidget, QApplication
from boy_ui_main import Ui_MainWindow  # 导入第一个py,主窗口
from boy_ui_new import Ui_newboy  # 导入第二个py,新增成员窗口
from change_gangwei import Ui_Form  # 导入的第五个py,岗位按键右键的窗口,在岗位button类里实例化
from manager_ui_gangwei import Ui_widget  # 导入第三个py,岗位管理窗口
from rightclickfrom import Ui_Rrightclickform  # 导入的第四个py,人员按键右键的窗口,在人员button类里实例化

x = 0  # 按键自己本身
Y = 0  # 岗位按键本身
U = 0  # 控制岗位类拖动

# 主窗口
class MainWindow(QMainWindow, Ui_MainWindow):  # 多重继承QMainWindow和Ui_MainWindow

    def __init__(self):
        super(MainWindow, self).__init__()  # 先调用父类QMainWindow的初始化方法
        self.setupUi(self)  # 再调用setupUi方法

        self.newboyshow = newwindow_anjian()  # 1实例化新建成员窗口1111111111
        self.newgangweishow = newwindow_gangwei()  # 2实例化管理岗位窗口2222222222

        self.add_boy.triggered.connect(self.newshow)  # 为增加人员按钮添加打开新窗口的动作
        self.saveaction.triggered.connect(self.savenow)  # 为保存增加保存的动作
        self.openaction.triggered.connect(self.opennow)  # 为打开增加打开的动作
        self.add_gangwei_huakuang.triggered.connect(self.manager_gangwei)  # 为增加岗位增加管理岗位功能,可以画了
        self.action_zaiwei.triggered.connect(self.zaiweishow)  # 增加在位显示功能

        self.save_data_anjian = dict()  # 需要保存的按键字典
        self.save_data_layout = dict()  # 需要保存的框体字典
        self.save_data_tubiao = dict()  # 需要保存的图标字典 命名=路径
        self.save_data_jiezou = []  # 需要保存的借用物品列表

        self.setAcceptDrops(True)  # 拖动按键用——人员
        self.current_anjian = None  # 当前岗位按键
        self.sig_huakuang = 0  # 画框用,=0时不让画框
        self.x0 = 0  # 画框用
        self.y0 = 0  # 画框用
        self.x1 = 0  # 画框用
        self.y1 = 0  # 画框用
        self.flag = False  # # 画框用,鼠标未按下
        self.move = False  # # 画框用,存在移动
        self.gangwei = 0  # 初始岗位设置
        self.x_move = None  # 拖动岗位框体后的坐标
        self.y_move = None  # 拖动岗位框体后的坐标

    #  1管理岗位页面,在新岗位页面设置完了岗位,点了确定,才能画框1111111111
    def manager_gangwei(self):
        self.newgangweishow.show()

    # 2人员增加和身份管理新窗口的动作222222222222
    def newshow(self):
        self.newboyshow.show()
    def zaiweishow(self):#在位状态统计
        num_all = 0
        num_zaiwei = 0
        for shuxing in self.save_data_anjian.values():
            num_all += 1
            if shuxing[4] != 1:
                num_zaiwei += 1

        QtWidgets.QMessageBox.information(self, "在位状态", f"总人数{num_all},在位人数{num_zaiwei}")

    #  画框用第一步---单击鼠标触发事件,初始左上角的点
    def mousePressEvent(self, event):
        self.x0 = event.pos().x()
        self.y0 = event.pos().y()
        self.flag = True

    # 画框用第二步--鼠标移动事件
    def mouseMoveEvent(self, event):
        self.move = True
        if self.flag:
            self.x1 = event.pos().x()
            self.y1 = event.pos().y()
            self.update()

    # 画框用第三步,只要拖动就会一直绘制事件
    def paintEvent(self, event):
        super().paintEvent(event)
        painter = QPainter(self)  # 拖动时候的临时框

        # 打开之后,再画或者最大化以后才能出现,不知道为啥,对刷新不太了解
        for rec in self.save_data_layout.values():  # 遍历所有的框体,一直画
            painter.setPen(QPen(QColor(rec[4]), 2, Qt.SolidLine))  # 画笔设置,每个框不一样,rec[4]为画笔颜色
            painter.drawRect(QRect(rec[0], rec[1], rec[2], rec[3]))
        if self.flag and self.move and self.sig_huakuang == 1:  # 只有当鼠标按下并且移动状态,还没选中岗位,画临时框
            rect = QRect(self.x0, self.y0, abs(self.x1 - self.x0), abs(self.y1 - self.y0))
            painter.setPen(QPen(Qt.red, 2, Qt.SolidLine))
            painter.drawRect(rect)

    # 画框用第四步--鼠标释放事件,清零,并且不再绘制,self.sig_huakuang=0
    def mouseReleaseEvent(self, event):
        global Y, U
        self.flag = False  # 不再按下
        self.move = False  # 不再移动
        self.x_move = event.pos().x()  # 拖动岗位类的最终位置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值