一简介
更新了之前做的
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() # 拖动岗位类的最终位置