之前通过 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_())