2021-04-25 pyqt5界面 socketserver服务端 EXCEL读写 工单派发 数据展示

        之前通过 EXCEL读写 实现用户名密码校验,新增,修改,工单发起,显示。受到很多局限性影响,还是转回mysql操作便捷些。

不过前端显示不受影响,只是调整 socketserver服务端 代码。

 

 

 

 

 

 

代码如下:

import socketserver
import json
import xlrd
import xlwt
from xlutils.copy import copy

class MyServer(socketserver.BaseRequestHandler):
    def handle(self):
        print('conn is:',self.request)
        print('addr is:',self.client_address)
        while True:
            try:
                data = self.request.recv(102400)
                if not data:break
                data = data.decode('utf-8')
                print('收到客户端的消息是:',data,self.client_address)
                js_data = json.loads(data)

                #类型1登录
                if str(js_data['leixing'])=='1':
                    #关联Excel表里 用户名密码 是否存在
                    ws = xlrd.open_workbook('./images/数据存储表.xls').sheet_by_name('用户名密码')
                    crow=ws.nrows
                    for i in range(crow):
                        if ws.cell_value(i, 0) == js_data['ziduan1']:

                            if str(ws.cell_value(i,1))==js_data['ziduan2']:
                                data='{"leixing":"%s","ziduan1":"%s","ziduan2":"%s","ziduan3":"%s","ziduan4":"%s","ziduan5":"%s","ziduan6":"%s" }' %(
                                '类型1',js_data['ziduan1'],js_data['ziduan2'],'用户名密码正确',ws.cell_value(i,2),ws.cell_value(i,3),ws.cell_value(i,4))

                                break
                            elif str(ws.cell_value(i,1))!=js_data['ziduan2']:
                                data = '{"leixing":"%s","ziduan1":"%s","ziduan2":"%s","ziduan3":"%s" }' % (
                            '类型1', js_data['ziduan1'], js_data['ziduan2'], '用户名密码错误')

                                break

                    else:
                        data = '{"leixing":"%s","ziduan1":"%s","ziduan2":"%s","ziduan3":"%s" }' % (
                                '类型1', js_data['ziduan1'], js_data['ziduan2'], '用户名不存在')

                #类型2 注册新用户
                elif str(js_data['leixing'])=='2':
                    ws = xlrd.open_workbook('./images/数据存储表.xls').sheet_by_name('用户名密码')
                    crow = ws.nrows
                    for i in range(crow):
                        if ws.cell_value(i, 0) == js_data['ziduan1']:
                            data = '{"leixing":"%s","ziduan1":"%s","ziduan2":"%s","ziduan3":"%s" }' % (
                                '类型1', js_data['ziduan1'], js_data['ziduan2'], '用户名已存在')
                            break
                    else:
                        wb=xlrd.open_workbook('./images/数据存储表.xls')
                        nwb=copy(wb)
                        nws=nwb.get_sheet('用户名密码')
                        nws.write(crow,0,js_data['ziduan1'])
                        nws.write(crow, 1, js_data['ziduan2'])
                        nwb.save('./images/数据存储表.xls')

                        data ='{"leixing":"%s","ziduan1":"%s","ziduan2":"%s","ziduan3":"%s" }' % (
                                '类型1', js_data['ziduan1'], js_data['ziduan2'], '用户名新建成功')

                # 类型3 忘记密码
                elif str(js_data['leixing']) == '3':
                    ws = xlrd.open_workbook('./images/数据存储表.xls').sheet_by_name('用户名密码')
                    crow = ws.nrows
                    #校验用户名存在
                    for i in range(crow):
                        #print(ws.cell_value(i, 0),js_data['ziduan1'],ws.cell_value(i, 3),js_data['ziduan2'])

                        if ws.cell_value(i, 0) == js_data['ziduan1']:
                            if ws.cell_value(i, 3) == js_data['ziduan2']:
                                data = '{"leixing":"%s","ziduan1":"%s","ziduan2":"%s","ziduan3":"%s" }' % (
                                    '密码找回', js_data['ziduan1'], ws.cell_value(i, 1), '密码找回')
                                break
                    else:

                        data = '{"leixing":"%s","ziduan1":"%s","ziduan2":"%s","ziduan3":"%s" }' % (
                            '密码找回', js_data['ziduan1'], js_data['ziduan2'], '用户名不存在')

                elif str(js_data['leixing']) == '耗材管理':
                    ws = xlrd.open_workbook('./images/耗材资源表.xls')
                    dalei = []
                    if js_data['ziduan1']=='大类':
                        ws1=ws.sheet_by_name('大类')
                        crow=ws1.nrows
                        for i in range(crow):
                            cell_data=ws1.cell_value(i,0)
                            dalei.append(cell_data)
                        data = '{"leixing":"%s","ziduan1":"%s","ziduan2":"%s" }' % (
                            '耗材管理', '大类', dalei)
                    elif js_data['ziduan1']=='中类':
                        ws1 = ws.sheet_by_name('中类')
                        crow = ws1.nrows
                        for i in range(crow):
                            if ws1.cell_value(i,0)==js_data['ziduan2']:
                                cell_data=ws1.cell_value(i,1)
                                dalei.append(cell_data)
                        data = '{"leixing":"%s","ziduan1":"%s","ziduan2":"%s" }' % (
                            '耗材管理', '中类', dalei)
                    elif js_data['ziduan1']=='小类':
                        ws1 = ws.sheet_by_name('小类')
                        crow = ws1.nrows
                        for i in range(crow):
                            if ws1.cell_value(i, 0) == js_data['ziduan2']:
                                cell_data = ws1.cell_value(i, 1)
                                dalei.append(cell_data)
                        data = '{"leixing":"%s","ziduan1":"%s","ziduan2":"%s" }' % (
                            '耗材管理', '小类', dalei)
                    elif js_data['ziduan1']=='具体类型':
                        ws1 = ws.sheet_by_name('具体类型')
                        crow = ws1.nrows
                        for i in range(crow):
                            if ws1.cell_value(i, 0) == js_data['ziduan2']:
                                cell_data = ws1.cell_value(i, 1)
                                dalei.append(cell_data)
                        data = '{"leixing":"%s","ziduan1":"%s","ziduan2":"%s" }' % (
                            '耗材管理', '具体类型', dalei)

                    elif js_data['ziduan1'] == '工单提交':
                        ws = xlrd.open_workbook('./images/耗材申请工单存储.xls')
                        if js_data['ziduan2'] == '申请':
                            print(js_data['ziduan3'])
                            gdtj_sq = js_data['ziduan3'].replace('[', '').replace(']', '').split(",")
                            print(gdtj_sq)
                            crow = ws.sheet_by_name('耗材申请工单').nrows
                            nwb = copy(ws)
                            nws = nwb.get_sheet('耗材申请工单')
                            #遍历列表
                            l_num=0
                            for i in (gdtj_sq):
                                nws.write(crow, l_num, i)
                                l_num += 1
                            nwb.save('./images/耗材申请工单存储.xls')

                            data = '{"leixing":"%s","ziduan1":"%s","ziduan2":"%s","ziduan3":"%s" }' % (
                                '耗材管理', js_data['ziduan1'], js_data['ziduan2'], '工单创建成功')
                    elif js_data['ziduan1'] == '工单查询':
                        ws = xlrd.open_workbook('./images/耗材申请工单存储.xls')
                        ws1 = ws.sheet_by_name('耗材申请工单')
                        crow = ws1.nrows - 1
                        yema = int(js_data['ziduan2'])
                        hcgd_Table_fk=[]
                        if crow-yema*20 >= 20 :
                            ids = 20
                        else:
                            ids = crow-yema*20
                        print(ids)

                        for i in range(ids):
                            hcgd_Table_id =yema*20 + i + 1
                            #print(hcgd_Table_id)
                            Table_item='(%s!%s!%s!%s!%s!%s!%s!%s!%s)' % (
                                ws1.cell_value(hcgd_Table_id, 0),ws1.cell_value(hcgd_Table_id, 1),ws1.cell_value(hcgd_Table_id, 2),ws1.cell_value(hcgd_Table_id, 4),
                             ws1.cell_value(hcgd_Table_id, 6),ws1.cell_value(hcgd_Table_id, 7),ws1.cell_value(hcgd_Table_id, 8),ws1.cell_value(hcgd_Table_id, 9),ws1.cell_value(hcgd_Table_id, 10))
                            #print(Table_item)
                            hcgd_Table_fk.append(Table_item)
                        print(111)
                        data = '{"leixing":"%s","ziduan1":"%s","ziduan2":"%d","ziduan3":"%s" }' % (
                            '耗材管理', js_data['ziduan1'], crow, hcgd_Table_fk)



                else:
                    data = '{"leixing":"%s","ziduan1":"%s" }' %\
                         ('类型3',js_data['ziduan1'])
                self.request.sendall(data.upper().encode('utf-8'))
            except Ellipsis as e:
                print(e)
                break


if __name__ == '__main__':
    s=socketserver.ThreadingTCPServer(('127.0.0.1',8000),MyServer)
    s.serve_forever()#类似实现连接循环

 

目前是通过读取修改EXCEL文件获取用户名密码进行校验,通过传入类型反馈查询结果。

 

代码如下:

import random
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
#from PyQt5.uic.properties import QtGui, QtCore
import time



class CommonHelper:
    @staticmethod
    def readQSS(style):
        with open(style,'r') as f:
            return f.read()


class AbnormityWindow(QWidget):
    sjm='1'
    ran_char = []
    ran_chars = []
    for i in range(48, 58):
        ran_char.append(chr(i))
    for i in range(65, 91):
        ran_char.append(chr(i))
    for i in range(97, 123):
        ran_char.append(chr(i))

    def __init__(self):
        super().__init__()
        self.setWindowTitle("异形窗口")
        self.pix = QBitmap('./images/mask.png')

        self.resize(self.pix.size())
        self.setMask(self.pix)
        main_gbos=QGridLayout()

        hbox =QGridLayout()


        Forget_password = QPushButton(self)
        Forget_password.setText('忘记密码')
        Forget_password.resize(60,22)
        Forget_password.move(310, 184)
        Forget_password.clicked.connect(self.Forget_Password)

        name_label =QLabel('姓名')
        hbox.addWidget(name_label, 0, 0)
        self.name_edit = QLineEdit()
        self.name_edit.setPlaceholderText('姓名输入')
        hbox.addWidget(self.name_edit, 0, 1)

        pass_label = QLabel('密码')
        hbox.addWidget(pass_label, 1, 0)
        self.pass_edit = QLineEdit()
        self.pass_edit.setPlaceholderText('密码输入')
        self.pass_edit.setEchoMode(QLineEdit.PasswordEchoOnEdit)
        hbox.addWidget(self.pass_edit, 1, 1)

        sign_btn = QPushButton('登录')
        sign_btn.clicked.connect(self.sign_btn_click)
        hbox.addWidget(sign_btn, 2, 0)


        self.sjm_edit = QLineEdit()
        self.sjm_edit.setPlaceholderText('随机码输入')
        hbox.addWidget(self.sjm_edit, 2, 1)

        bt_label =QLabel('登录界面')
        bt_label.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
        bt_label.setStyleSheet("font-size:30px;font-weight:bold;font-family:宋体;")

        bt_label.setObjectName('bt_label')

        main_gbos.addWidget(bt_label, 0, 1)


        styLabel=QLabel('设置窗口风格')
        self.styComboBox=QComboBox()
        self.styComboBox.addItems(QStyleFactory.keys())
        self.styIndex=self.styComboBox.findText(QApplication.style().objectName(),Qt.MatchFixedString)
        self.styComboBox.setCurrentIndex(self.styIndex)

        self.styComboBox.activated[str].connect(self.HandleStyleChanged)
        hbox.addWidget(styLabel, 3, 0)
        hbox.addWidget(self.styComboBox, 3, 1)





        main_gbos.addLayout(hbox, 2, 1)

        qss_btn =QPushButton('装载样式')
        qss_btn.clicked.connect(self.onClick)
        qss_btn.resize(20,20)

        #main_gbos.addWidget(qss_btn, 3, 0)

        sxsjm_btn = QPushButton('刷新随机码')
        sxsjm_btn.clicked.connect(self.sxStyleChanged)
        main_gbos.addWidget(sxsjm_btn, 3, 0)

        close_btn = QPushButton('关闭界面')
        close_btn.clicked.connect(self.chuangkou_close)
        main_gbos.addWidget(close_btn, 3, 2)

        self.setLayout(main_gbos)

    def sign_btn_click(self):


        #######特殊留
        self.fym = SecondUi(self.name_edit.text(), 'xxx','1360xxxxxx','山东省xxxx')
        self.fym.show()
        self.hide()
        #######特殊留
        if 1 ==2:
            dlgc_fk = self.socket_dlgc('1', self.name_edit.text(), self.pass_edit.text(),
                                       time.strftime("%Y%m%d%H%M%S", time.localtime()))

            if dlgc_fk['ZIDUAN3'] not in (None, '用户名密码正确'):
                # print(dlgc_fk['ZIDUAN3'])
                QMessageBox.information(None, dlgc_fk['ZIDUAN3'], dlgc_fk['ZIDUAN3'], QMessageBox.Yes)
            elif self.sjm_edit.text() not in (None, self.sjm):
                # print('随机码错误')
                QMessageBox.information(None, '随机码错误', '随机码错误', QMessageBox.Yes)

            else:
                QMessageBox.information(None, '登录成功', '登录成功', QMessageBox.Yes)
                # print(dlgc_fk['ZIDUAN4'], dlgc_fk['ZIDUAN5'], dlgc_fk['ZIDUAN6'])
                yh_name = dlgc_fk['ZIDUAN4']
                yh_sjhm = dlgc_fk['ZIDUAN5']
                yh_danw = dlgc_fk['ZIDUAN5']

                self.fym = SecondUi(self.name_edit.text(), self.pass_edit.text(), yh_name, yh_sjhm, yh_danw)
                self.fym.show()
                self.hide()

    def socket_dlgc(self,leixing,name_text,pass_text,in_time):
        import socket
        import json
        tcp_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        tcp_client.connect(('127.0.0.1', 8000))

        msg_ziduan1 = str(name_text)
        msg_ziduan2 = str(pass_text)
        msg_ziduan3 = str(in_time)

        msg_leixing = str(leixing)
        if None == name_text:
            print('与服务器断开连接')
        msg = '{"leixing":"%s","ziduan1":"%s","ziduan2":"%s","ziduan3":"%s" }' % (
            msg_leixing, msg_ziduan1, msg_ziduan2, msg_ziduan3)
        #print(msg)

        tcp_client.send(msg.encode("utf-8"))  # 说话    #
        data = tcp_client.recv(102400)  # 听话
        print('服务器反馈:', data.decode('utf-8'))
        js_data = json.loads(data.decode('utf-8'))
        tcp_client.close()
        return js_data

    def Forget_Password(self):
        self.fp = ForgetPassword(self.name_edit.text(), self.pass_edit.text())
        self.fp.show()
        #self.hide()

    def rndChar(self):
        return self.ran_char[random.randint(0, len(self.ran_char))]

    def HandleStyleChanged(self,style):
        QApplication.setStyle(style)

    def sxStyleChanged(self):
        self.ran_chars = []
        self.styIndex = self.styComboBox.findText(QApplication.style().objectName(), Qt.MatchFixedString)
        style = self.styComboBox.itemText(self.styIndex)
        QApplication.setStyle(style)




    def onClick(self):
        styleFile='./style.qss'
        qssStyle=CommonHelper.readQSS(styleFile)
        form.setStyleSheet(qssStyle)


    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.m_drag = True
            self.m_DragPosition = event.globalPos() - self.pos()
            self.setCursor(QCursor(Qt.OpenHandCursor))

    def mouseMoveEvent(self, QMouseEvent):
        if Qt.LeftButton and self.m_drag:
            # 当左键移动窗体修改偏移值,实时计算窗口左上角坐标
            self.move(QMouseEvent.globalPos() - self.m_DragPosition)

    def mouseReleaseEvent(self, QMouseEvent):
        self.m_drag = False
        self.setCursor(QCursor(Qt.ArrowCursor))
    def paintEvent(self, event):

        painter = QPainter(self)
        painter.drawPixmap(0,0,self.pix.width(),self.pix.height(),QPixmap('./images/screen1.jpg'))
        # 随机码显示
        painter_sjm = QPainter(self)
        brush = QBrush()
        brush.setColor(Qt.yellow)
        brush.setStyle(Qt.SolidPattern)
        painter_sjm.setBrush(brush)
        painter_sjm.drawRect(310, 213, 60, 19)

        painter_sjm.setPen(Qt.blue)
        for i in range(30):
            painter_sjm.drawLine(
                random.randint(310, 370), random.randint(213, 232),
                random.randint(310, 370), random.randint(213, 232)
            )

        font = QFont()
        font.setPointSize(15)
        font.setBold(True)
        painter_sjm.setFont(font)
        painter_sjm.setPen(Qt.black)


        for i in range(4):
            if len(self.ran_chars)<4:
                self.ran_chars.append(str(self.rndChar()))
            painter_sjm.drawText(15 * i + 311, 230, self.ran_chars[i])
        self.sjm = (self.ran_chars[0] + self.ran_chars[1] + self.ran_chars[2] + self.ran_chars[3])

    def chuangkou_close(self):
        self.close()

#忘记密码界面
class ForgetPassword(QWidget):
    sjm = '1'
    ran_char = []
    ran_chars = []
    for i in range(48, 58):
        ran_char.append(chr(i))
    for i in range(65, 91):
        ran_char.append(chr(i))
    for i in range(97, 123):
        ran_char.append(chr(i))


    def __init__(self,name_cd,pass_cd,parent = None):
        super().__init__(parent)
        print(name_cd,pass_cd)
        self.setWindowTitle("异形窗口")
        self.pix = QBitmap('./images/mask.png')
        self.ran_chars = []



        self.resize(self.pix.size())
        self.setMask(self.pix)

        label_wzbj = 'border-width:1px;font-size:13px;border-color:rgb(0,0,0,0.5);' \
                     'background-color:rgb(255,255,255,0.6);'

        self.label_zh = QLabel(self)
        self.label_zh.setText("用户账户")
        self.label_zh.move(100, 140)
        self.label_zh.setFixedSize(60, 22)
        self.label_zh.setStyleSheet(label_wzbj)

        self.sr_zh = QLineEdit(self)
        self.sr_zh.setPlaceholderText("请输入账号")
        self.sr_zh.move(170, 140)
        self.sr_zh.setFixedSize(120, 22)
        self.sr_zh.setStyleSheet(label_wzbj)

        self.label_xm = QLabel(self)
        self.label_xm.setText("手机号码")
        self.label_xm.move(100, 170)
        self.label_xm.setFixedSize(60, 22)
        self.label_xm.setStyleSheet(label_wzbj)

        self.sr_hm = QLineEdit(self)
        self.sr_hm.setPlaceholderText("请输入号码")
        self.sr_hm.move(170, 170)
        self.sr_hm.setFixedSize(120, 22)
        self.sr_hm.setStyleSheet(label_wzbj)

        self.xsjm_btn = QPushButton(self)
        self.xsjm_btn.setText('找回密码')
        self.xsjm_btn.move(100, 200)
        self.xsjm_btn.setFixedSize(60, 22)
        self.xsjm_btn.setStyleSheet(label_wzbj)
        self.xsjm_btn.clicked.connect(self.zhaohui_pass)


        self.sr_sjm = QLineEdit(self)
        self.sr_sjm.setPlaceholderText("随机码")
        self.sr_sjm.move(230, 200)
        self.sr_sjm.setFixedSize(60, 22)
        self.sr_sjm.setStyleSheet(label_wzbj)

        self.gb_an = QPushButton(self)
        self.gb_an.setText('X')
        self.gb_an.move(380, 5)
        self.gb_an.setFixedSize(15, 15)
        self.gb_an.setStyleSheet(label_wzbj)
        self.gb_an.clicked.connect(self.close)


    def zhaohui_pass(self):
        dlgc_fk = self.socket_zhmm('3', self.sr_zh.text(), self.sr_hm.text(),
                                   time.strftime("%Y%m%d%H%M%S", time.localtime()))
        print(dlgc_fk)

        if dlgc_fk['ZIDUAN3'] not in (None, '密码找回'):
            # print(dlgc_fk['ZIDUAN3'])
            QMessageBox.information(None, dlgc_fk['ZIDUAN3'], dlgc_fk['ZIDUAN3'], QMessageBox.Yes)
        elif self.sr_sjm.text() not in (None, self.sjm):
            # print('随机码错误')
            QMessageBox.information(None, '随机码错误', '随机码错误', QMessageBox.Yes)

        else:
            QMessageBox.information(None, '密码找回成功', '您的密码是:'+dlgc_fk['ZIDUAN2'], QMessageBox.Yes)

    def socket_zhmm(self, leixing, name_text, hm_text, in_time):
        import socket
        import json
        tcp_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        tcp_client.connect(('127.0.0.1', 8000))

        msg_leixing = str(leixing)
        msg_ziduan1 = str(name_text)
        msg_ziduan2 = str(hm_text)
        msg_ziduan3 = str(in_time)


        if None == name_text:
            print('与服务器断开连接')
        msg = '{"leixing":"%s","ziduan1":"%s","ziduan2":"%s","ziduan3":"%s" }' % (
            msg_leixing, msg_ziduan1, msg_ziduan2, msg_ziduan3)
        # print(msg)

        tcp_client.send(msg.encode("utf-8"))  # 说话    #
        data = tcp_client.recv(102400)  # 听话
        print('服务器反馈:', data.decode('utf-8'))
        js_data = json.loads(data.decode('utf-8'))
        tcp_client.close()
        return js_data

    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.m_drag = True
            self.m_DragPosition = event.globalPos() - self.pos()
            self.setCursor(QCursor(Qt.OpenHandCursor))

    def mouseMoveEvent(self, QMouseEvent):
        if Qt.LeftButton and self.m_drag:
            # 当左键移动窗体修改偏移值,实时计算窗口左上角坐标
            self.move(QMouseEvent.globalPos() - self.m_DragPosition)
    def rndChar(self):
        return self.ran_char[random.randint(0, len(self.ran_char))]

    def mouseReleaseEvent(self, QMouseEvent):
        self.m_drag = False
        self.setCursor(QCursor(Qt.ArrowCursor))
    def paintEvent(self, event):

        painter = QPainter(self)
        painter.drawPixmap(0,0,self.pix.width(),self.pix.height(),QPixmap('./images/screen3.jpeg'))
        # 随机码显示
        painter_sjm = QPainter(self)
        brush = QBrush()
        brush.setColor(Qt.yellow)
        brush.setStyle(Qt.SolidPattern)
        painter_sjm.setBrush(brush)
        painter_sjm.drawRect(170, 200, 55, 22)

        font = QFont()
        font.setPointSize(15)
        font.setBold(True)
        painter_sjm.setFont(font)
        painter_sjm.setPen(Qt.black)

        for i in range(4):
            if len(self.ran_chars) < 4:
                self.ran_chars.append(str(self.rndChar()))
            painter_sjm.drawText(13 * i + 171, 218, self.ran_chars[i])
        self.sjm = (self.ran_chars[0] + self.ran_chars[1] + self.ran_chars[2] + self.ran_chars[3])



#副页面
class SecondUi(QTabWidget):
    def __init__(self,name_cd,yh_name,yh_sjhm,yh_danw,parent = None):
        super(SecondUi,self).__init__(parent)

        self.in_time = self.get_current_time()
        self.setWindowTitle('选项卡控件')
        self.setStyleSheet("background-color:rgb(135,206,235,0.3)")
        self.dl_name=name_cd
        self.dlyh_name=yh_name
        self.dlyh_sjhm=yh_sjhm
        self.dlyh_danw=yh_danw
        self.desktop = QApplication.desktop()
        self.screenRect = self.desktop.screenGeometry()
        self.height = self.screenRect.height()
        self.width = self.screenRect.width()
        self.resize(self.width-40,self.height-80)

        gg_vbox=QVBoxLayout()
        gg_label =QLabel('广告图')
        gg_label.setPixmap(QPixmap('./images/科技风.bmp').scaled(self.width-30,50))
        gg_vbox.addWidget(gg_label)



        #副页面总布局
        second_hbox=QHBoxLayout()
        gg_vbox.addLayout(second_hbox)

        #树状结构
        self.tree = QTreeWidget()
        self.tree.setHeaderLabel('名称')
        self.tree.setFixedSize(180,self.height-190)
        zu_root=QTreeWidgetItem(self.tree)
        zu_root.setText(0,'菜单架构')
        hc_root=QTreeWidgetItem(zu_root)
        hc_root.setText(0, '耗材工单管理')

        dict=['耗材申请界面','耗材审批界面','耗材工单查询']
        for i in dict:
            hcf_root = QTreeWidgetItem(hc_root)
            hcf_root.setText(0,i)

        tc_root = QTreeWidgetItem(self.tree)
        tc_root.setText(0, '退出账号')
        close_root = QTreeWidgetItem(self.tree)
        close_root.setText(0, '关闭界面')

        self.tree.addTopLevelItem(zu_root)
        #点击树状结构触发界面变动
        self.tree.clicked.connect(self.gettreetext)
        #界面主布局加载树状结构
        second_hbox.addWidget(self.tree)


        #right右边布局占位
        self.right_gbox = QVBoxLayout()
        zw_label = QLabel('占位')
        zw_label.setPixmap(QPixmap('./images/科技风.bmp').scaled(self.width-220, 10))
        self.right_gbox.addWidget(zw_label)

        self.tab_win =QTabWidget()
        self.tab_win.setFixedSize(self.width-210,self.height-200)
        self.tabjm =QWidget()
        self.tab_win.addTab(self.tabjm,'')

        self.right_gbox.addWidget(self.tab_win)

        second_hbox.addLayout(self.right_gbox)

        dc_label = QLabel('底层')
        dc_label.setPixmap(QPixmap('./images/科技风.bmp').scaled(self.width-40, 20))
        gg_vbox.addWidget(dc_label)
        self.setLayout(gg_vbox)

    def gettreetext(self,index):
        item =self.tree.currentItem()

        if item.text(0)=='耗材申请界面':

            but_sty = 'border-width:2px;border-style:solid;font-size:15px;' \
                      'border-color:rgb(255,255,255,0.5);background-color:rgb(255,255,255,0.3);'

            self.tab_win.removeTab(self.tab_win.currentIndex())
            self.tabjm_1 = QWidget()
            self.tab_win.addTab(self.tabjm_1,item.text(0))
            process_ah_lay=QHBoxLayout()
            process_av_lay=QVBoxLayout()
            process_a_lay = QGridLayout()
            process_av_lay.addLayout(process_a_lay)
            process_ah_lay.addLayout(process_av_lay)

            zwa_label = QLabel('占位')
            zwa_label.setPixmap(QPixmap('./images/screen2.jpg').scaled(100, 600))
            process_ah_lay.addWidget(zwa_label)

            #gd_biaoti = QLabel('淄博移动公司耗材申请单')
            #process_a_lay.addWidget(gd_biaoti, 0, 0,0,5,Qt.AlignCenter)
            shenqing_dw = QLabel('申请单位')
            shenqing_dw.setFixedSize(120, 30)
            shenqing_dw.setStyleSheet(but_sty)
            process_a_lay.addWidget(shenqing_dw,1,0)
            shenqing_dwm= QLabel(self.dlyh_danw)
            shenqing_dwm.setFixedSize(160, 30)
            shenqing_dwm.setStyleSheet(but_sty)
            process_a_lay.addWidget(shenqing_dwm, 1, 1)

            shenqing_xm = QLabel('申请人姓名')
            shenqing_xm.setFixedSize(235, 30)
            shenqing_xm.setStyleSheet(but_sty)
            process_a_lay.addWidget(shenqing_xm, 1, 2)
            shenqing_xmn = QLabel(self.dlyh_name)
            shenqing_xmn.setFixedSize(160, 30)
            shenqing_xmn.setStyleSheet(but_sty)
            process_a_lay.addWidget(shenqing_xmn, 1, 3)

            shenqing_time = QLabel('申请时间')
            shenqing_time.setFixedSize(160, 30)
            shenqing_time.setStyleSheet(but_sty)
            process_a_lay.addWidget(shenqing_time, 1, 4)
            self.shenqing_day = QLabel(self.in_time)
            self.shenqing_day.setFixedSize(160, 30)
            self.shenqing_day.setStyleSheet(but_sty)
            process_a_lay.addWidget(self.shenqing_day, 1, 5)

            xuanze_dl = QLabel('选择申请型号')
            xuanze_dl.setStyleSheet(but_sty)
            process_a_lay.addWidget(xuanze_dl, 2, 0)
            dl_fh = self.socket_zhmm('耗材管理','大类','0',time.strftime("%Y%m%d%H%M%S", time.localtime()))
            dl_fh_zfc = dl_fh['ZIDUAN2'].replace('[','').replace(']','').replace("'","").replace(" ","").split(",")

            self.combo_dl =QComboBox()

            self.combo_dl.addItems(dl_fh_zfc)
            self.combo_dl.setFixedSize(160, 30)
            self.combo_dl.setStyleSheet(but_sty)
            process_a_lay.addWidget(self.combo_dl, 2, 1)
            self.combo_dl.activated.connect(self.zl_addItem)

            self.combo_zl = QComboBox()
            self.combo_zl.setFixedSize(235, 30)
            self.combo_zl.setStyleSheet(but_sty)
            process_a_lay.addWidget(self.combo_zl, 2, 2)
            self.combo_zl.currentIndexChanged.connect(self.xl_addItem)

            self.combo_xl = QComboBox()
            self.combo_xl.setFixedSize(160, 30)
            self.combo_xl.setStyleSheet(but_sty)
            process_a_lay.addWidget(self.combo_xl, 2, 3)
            self.combo_xl.currentIndexChanged.connect(self.jtl_addItem)

            self.combo_jtl = QComboBox()
            self.combo_jtl.setFixedSize(320, 30)
            self.combo_jtl.setStyleSheet(but_sty)
            process_a_lay.addWidget(self.combo_jtl, 2, 4,1,2)

            sqnum_Label = QLabel('输入申请数量')
            sqnum_Label.setStyleSheet(but_sty)
            process_a_lay.addWidget(sqnum_Label, 3, 0)

            self.sqnum_Edit = QSpinBox()
            self.sqnum_Edit.setFixedSize(160, 30)
            self.sqnum_Edit.setValue(1)
            self.sqnum_Edit.setRange(1,999)
            self.sqnum_Edit.setStyleSheet(but_sty)

            process_a_lay.addWidget(self.sqnum_Edit, 3, 1)

            sqren_Label = QLabel('申请人账号')
            sqren_Label.setStyleSheet(but_sty)
            sqren_Label.setFixedSize(235, 30)
            process_a_lay.addWidget(sqren_Label, 3, 2)

            sqrenxs_Label = QLabel(self.dl_name)
            sqrenxs_Label.setStyleSheet(but_sty)
            process_a_lay.addWidget(sqrenxs_Label, 3, 3)

            sqMobile_Label = QLabel('申请人号码')
            sqMobile_Label.setStyleSheet(but_sty)
            process_a_lay.addWidget(sqMobile_Label, 3, 4)

            sqMobilexs_Label = QLabel(self.dlyh_sjhm)
            sqMobilexs_Label.setStyleSheet(but_sty)
            process_a_lay.addWidget(sqMobilexs_Label, 3, 5)

            fujian_but = QPushButton('添加附件')
            fujian_but.setFixedSize(120, 30)
            fujian_but.clicked.connect(self.openimage)
            process_a_lay.addWidget(fujian_but, 4, 0)

            self.fujian_label = QLabel('附件路径')
            self.fujian_label.setFixedSize(733, 30)
            self.fujian_label.setStyleSheet(but_sty)
            process_a_lay.addWidget(self.fujian_label, 4, 1, 1, 4)

            fujian_del = QPushButton('清除附件')
            fujian_del.setFixedSize(160, 30)
            fujian_del.clicked.connect(self.fujiandel)
            process_a_lay.addWidget(fujian_del, 4, 5)

            note_Label = QLabel('描述信息')
            note_Label.setFixedSize(120, 200)
            note_Label.setStyleSheet(but_sty)
            process_a_lay.addWidget(note_Label, 5, 0, 1, 1)

            self.note_Text_Edit=QTextEdit()
            self.note_Text_Edit.setFixedSize(888, 200)
            self.note_Text_Edit.setStyleSheet(but_sty)
            process_a_lay.addWidget(self.note_Text_Edit, 5,1,1,5)

            self.ok_but = QPushButton('工单提交')
            self.ok_but.setFixedSize(320, 60)
            self.ok_but.clicked.connect(self.haocai_oktj)
            process_a_lay.addWidget(self.ok_but, 6, 2)


            # 设定时间
            self.count = 30
            self.ok_but.clicked.connect(self.Action)
            from PyQt5 import QtCore
            self.time = QtCore.QTimer(self)
            # 每秒1000毫秒
            self.time.setInterval(1000)
            # 时间到触发 Refresh
            self.time.timeout.connect(self.Refresh)

            self.tabjm_1.setLayout(process_ah_lay)





        elif item.text(0)=='耗材审批界面':
            self.tab_win.removeTab(self.tab_win.currentIndex())
            self.tabjm_2 = QWidget()
            self.tab_win.addTab(self.tabjm_2, item.text(0))
            process_b_lay = QGridLayout()

            gd_biaoti = QLabel('淄博移动公司耗材审批')
            process_b_lay.addWidget(gd_biaoti, 0, 0)
            shenqing_dw = QLabel('申请单位')
            process_b_lay.addWidget(shenqing_dw, 1, 0)
            shenqing_dwm = QLabel('单位名称')
            process_b_lay.addWidget(shenqing_dwm, 1, 1)

            shenqing_time = QLabel('申请时间')
            process_b_lay.addWidget(shenqing_time, 1, 4)
            shenqing_day = QLabel('202104281111')
            process_b_lay.addWidget(shenqing_day, 1, 5)


            self.tabjm_2.setLayout(process_b_lay)


        elif item.text(0)=='耗材工单查询':
            self.ym_num=0
            self.tab_win.removeTab(self.tab_win.currentIndex())
            self.tabjm_3 = QWidget()
            self.tab_win.addTab(self.tabjm_3, item.text(0))

            process_c_lay = QGridLayout()
            self.hcgd_Table =QTableWidget()

            #表格显示行,列
            self.hcgd_Table.setRowCount(20)
            self.hcgd_Table.setColumnCount(9)
            hcgd_list_item =['工单编号','申请时间','申请单位','申请人姓名','大类','中类','小类','具体名称','申请数量']
            self.hcgd_Table.setHorizontalHeaderLabels(hcgd_list_item)
            self.hcgd_Table.setFixedSize(self.width-240,self.height-280)
            self.hcgd_Table.resizeColumnsToContents()
            self.hcgd_Table.setAlternatingRowColors(True)
            self.hcgd_Table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
            #self.hcgd_Table.verticalHeader().setVisible(False)
            #self.hcgd_Table.verticalHeader().setHidden(False)
            #表格不能被编辑
            self.hcgd_Table.setEditTriggers(QAbstractItemView.NoEditTriggers)
            #选中整行
            self.hcgd_Table.setSelectionBehavior(QAbstractItemView.SelectRows)
            #鼠标双击触发信号槽,
            self.hcgd_Table.doubleClicked.connect(self.sync_table_double_clicked)

            # 加载一下数据,获取行数
            self.hcgd_Table_add(self.ym_num)

            process_c_lay.addWidget(self.hcgd_Table)

            self.hcgd_Table_ym = QLabel('当前页:%s 最大页:%s' % (str(self.ym_num+1), str(self.hcgd_Table_gdsz)))
            self.hcgd_Table_ym.setFixedSize(120, 25)
            process_c_lay.addWidget(self.hcgd_Table_ym,1,0)

            shang_but=QPushButton('<')
            shang_but.clicked.connect(self.shangye_click)
            process_c_lay.addWidget(shang_but, 1, 1)

            xia_but = QPushButton('>')
            xia_but.clicked.connect(self.xiaye_click)
            process_c_lay.addWidget(xia_but, 1, 2)

            self.tabjm_3.setLayout(process_c_lay)



        elif item.text(0) == '退出账号':
            self.fy_close()
        elif item.text(0) == '关闭界面':
            self.close()

    def sync_table_double_clicked(self, index):
        table_column = index.column()
        self.table_row = index.row()
        #页,行,列
        print(self.ym_num,self.table_row,table_column)
        #获取工单号
        print(self.hcgd_Table_fkitem[self.table_row])
        self.showDialog()


    def showDialog(self):
        print(111)
        dialog =QDialog()
        dialog.setWindowTitle('工单内容审核')
        dialog.setFixedSize(500,500)
        dialog_lay = QGridLayout(self)
        dialog_labela=QLabel(self.hcgd_Table_fkitem[self.table_row])
        dialog_lay.addWidget(dialog_labela)
        dialog_labelb = QLabel(self.hcgd_Table_fkitem[self.table_row])
        dialog_lay.addWidget(dialog_labelb)
        dialog.setLayout(dialog_lay)
        dialog.exec()



    def shangye_click(self):

        if self.ym_num ==0:
            self.hcgd_Table_add(self.ym_num)
            self.hcgd_Table_ym.setText('当前页:%s 最大页:%s'% (str(self.ym_num+1),str(self.hcgd_Table_gdsz)))
        else:
            self.hcgd_Table_add(self.ym_num-1)
            self.ym_num -= 1
            self.hcgd_Table_ym.setText('当前页:%s 最大页:%s'% (str(self.ym_num+1),str(self.hcgd_Table_gdsz)))
    def xiaye_click(self):
        if self.ym_num >=int(self.hcgd_Table_gdsz-1):
            self.hcgd_Table_add(self.ym_num)
            self.hcgd_Table_ym.setText('当前页:%s 最大页:%s'% (str(self.ym_num+1),str(self.hcgd_Table_gdsz)))
        else:
            self.hcgd_Table_add(self.ym_num+1)
            self.ym_num += 1
            self.hcgd_Table_ym.setText('当前页:%s 最大页:%s'% (str(self.ym_num+1),str(self.hcgd_Table_gdsz)))

    def hcgd_Table_add(self,num=0,num_2=0):
        hcgd_Table_fk = self.socket_zhmm('耗材管理', '工单查询', num, num_2)
        self.hcgd_Table_gds =int(hcgd_Table_fk['ZIDUAN2'])
        #先清理表格数据,然后加载
        self.hcgd_Table.clear()
        if self.hcgd_Table_gds % 20>=1:
            self.hcgd_Table_gdsz = self.hcgd_Table_gds//20 +1
        else:
            self.hcgd_Table_gdsz = self.hcgd_Table_gds // 20
        self.hcgd_Table_fkitem = hcgd_Table_fk['ZIDUAN3'].replace('[', '').replace(']', '').replace("'", "").replace(" ", "").split(",")
        newItem_hs = 0
        for i in self.hcgd_Table_fkitem:
            hcgd_Table_fkitemf=i.replace('(', '').replace(')', '').split("!")

            for a in range(9):
                newItem=QTableWidgetItem(hcgd_Table_fkitemf[a])
                self.hcgd_Table.setItem(newItem_hs,a,newItem)
            newItem_hs += 1


    def Action(self):
        if self.ok_but.isEnabled():
            self.time.start()
            self.ok_but.setEnabled(False)

    def Refresh(self):
        if self.count > 0:
            self.ok_but.setText(str(self.count) + '秒后重发')
            self.count -= 1
        else:
            self.time.stop()
            self.ok_but.setText('工单提交')
            self.ok_but.setEnabled(True)
            # 点击发送后 count 重置为30
            self.count = 30

    def get_current_time(self):

        ct = time.time()
        local_time = time.localtime(ct)
        data_head = time.strftime("%Y%m%d%H%M%S", local_time)
        data_secs = abs(ct - round(ct)) * 1000
        time_stamp = "%s%03d" % (data_head, data_secs)
        return time_stamp

    def openimage(self):
        """图片打开窗体"""
        # "*.jpg;;*.png;;All Files(*)" 是在打开窗体下显示的类型
        #"Excel2003文件,*.xls,Word文件,*.doc,文本文件,*.txt"
        imgName, imgType = QFileDialog.getOpenFileName(self, "打开文件","", "*.xls;*.doc;*.ppt;*.txt;;All Files(*)")
        # 打开文件路径 并被拉伸到窗体显示大小
        self.fujian_label.setText(imgName)
        self.shenqing_day.text(self.in_time)

    def haocai_oktj(self):
        oktj_zidian='[%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%d,%s,%s]' \
                    % (self.in_time,self.in_time,self.dlyh_danw,self.dl_name,
                        self.dlyh_name,self.dlyh_sjhm,self.combo_dl.currentText(),
                        self.combo_zl.currentText(),self.combo_xl.currentText(),
                        self.combo_jtl.currentText(),self.sqnum_Edit.value(),
                        self.note_Text_Edit.toPlainText(),self.fujian_label.text())
        haocai_oktj_fh = self.socket_zhmm('耗材管理','工单提交','申请',oktj_zidian)

        if haocai_oktj_fh['ZIDUAN3'] not in (None, '工单创建成功'):
            # print(dlgc_fk['ZIDUAN3'])
            QMessageBox.information(None, haocai_oktj_fh['ZIDUAN3'], haocai_oktj_fh['ZIDUAN3'], QMessageBox.Yes)

        else:
            QMessageBox.information(None, '服务器反馈', '您的工单:'+self.in_time+' '+haocai_oktj_fh['ZIDUAN3'], QMessageBox.Yes)
            #self.tab_win.removeTab(self.tab_win.currentIndex())
        self.in_time = self.get_current_time()



    def fujiandel(self):
        self.fujian_label.setText('')

    def zl_addItem(self):
        print(self.combo_dl.currentText())
        zl_fh = self.socket_zhmm('耗材管理', '中类', self.combo_dl.currentText(), time.strftime("%Y%m%d%H%M%S", time.localtime()))
        zl_fh_zfc = zl_fh['ZIDUAN2'].replace('[', '').replace(']', '').replace("'", "").replace(" ", "").split(",")
        self.combo_zl.clear()
        self.combo_zl.addItems(zl_fh_zfc)

    def xl_addItem(self):
        print(self.combo_zl.currentText())
        xl_fh = self.socket_zhmm('耗材管理', '小类', self.combo_zl.currentText(), time.strftime("%Y%m%d%H%M%S", time.localtime()))
        xl_fh_zfc = xl_fh['ZIDUAN2'].replace('[', '').replace(']', '').replace("'", "").replace(" ", "").split(",")
        self.combo_xl.clear()
        self.combo_xl.addItems(xl_fh_zfc)

    def jtl_addItem(self):
        print(self.combo_xl.currentText())
        jtl_fh = self.socket_zhmm('耗材管理', '具体类型', self.combo_xl.currentText(), time.strftime("%Y%m%d%H%M%S", time.localtime()))
        jtl_fh_zfc = jtl_fh['ZIDUAN2'].replace('[', '').replace(']', '').replace("'", "").replace(" ", "").split(",")
        self.combo_jtl.clear()
        self.combo_jtl.addItems(jtl_fh_zfc)

    def socket_zhmm(self, leixing, name_text, hm_text, in_time):
        import socket
        import json
        tcp_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        tcp_client.connect(('127.0.0.1', 8000))

        msg_leixing = str(leixing)
        msg_ziduan1 = str(name_text)
        msg_ziduan2 = str(hm_text)
        msg_ziduan3 = str(in_time)


        if None == name_text:
            print('与服务器断开连接')
        msg = '{"leixing":"%s","ziduan1":"%s","ziduan2":"%s","ziduan3":"%s" }' % (
            msg_leixing, msg_ziduan1, msg_ziduan2, msg_ziduan3)
        # print(msg)

        tcp_client.send(msg.encode("utf-8"))  # 说话    #
        data = tcp_client.recv(102400)  # 听话
        print('服务器反馈:', data.decode('utf-8'))
        js_data = json.loads(data.decode('utf-8'))
        tcp_client.close()
        return js_data


    def fy_close(self):
        self.zym = AbnormityWindow()
        self.zym.show()
        self.hide()


if __name__ == "__main__":
    app = QApplication(sys.argv)
    form = AbnormityWindow()
    form.show()
    sys.exit(app.exec_())
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值