创建一个流程发起界面,通过选择下拉菜单和单选选择,选择上传文本,点击选择文件,获取一个文件路径,预览按钮,可以生成一个窗口,可以预览一下表格数据,然后通过上传按钮,可以进行数据提交。
import sys, math
from PyQt5.QtWidgets import *
from PyQt5 import QtWidgets, QtCore, QtGui
from PyQt5.QtCore import QDate, QDateTime, QTime
import xlrd
import random
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.resize(800, 600)
self.setWindowTitle('流程发起页面')
self.setStyleSheet("background-color:rgb(135,206,235)")
# 内部 显示图片 框属性
self.label_tp = QLabel(self)
# 内部 显示图片 框标题初始
self.label_tp.setText("显示图片")
# 内部窗口的宽度高度
self.label_tp.setFixedSize(200, 80)
# 内部窗口的显示位置
self.label_tp.move(0, 0)
# 内部窗口的内属性 font-size 字体大小,
self.label_tp.setStyleSheet("QLabel{background:rgb(300,300,300,120,0.3);}"
"QLabel{color:rgb(300,300,300,120,0.3);font-size:20px;font-weight:bold;font-family:宋体;}"
)
jpg = QtGui.QPixmap('./images/标志.jpg').scaled(self.label_tp.width(), self.label_tp.height())
# 在窗体显示
self.label_tp.setPixmap(jpg)
# 会员注册 文字显示
label_bj = 'border-width:1px;border-style:solid;font-size:25px;border-color:rgb(255,255,255,0.5);background-color:rgb(255,255,255,0.3);'
self.label = QLabel(self)
self.label.setText("批量流程发起")
#self.label.setOpenExternalLinks(True) # 允许超链接
self.label.move(100, 100)
self.label.setFixedSize(600, 50)
self.label.setStyleSheet(label_bj)
self.label.setAlignment(QtCore.Qt.AlignVCenter | QtCore.Qt.AlignCenter)
label_wzbj = 'border-width:1px;border-style:solid;font-size:15px;border-color:rgb(0,0,0,0.5);background-color:rgb(255,255,255,0.3);'
self.label_zh = QLabel(self)
self.label_zh.setText("选择系统 :")
self.label_zh.move(100, 170)
self.label_zh.setFixedSize(100, 30)
self.label_zh.setStyleSheet(label_wzbj)
self.label_zh.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignCenter)
self.label_mm = QLabel(self)
self.label_mm.setText("申请权限 :")
self.label_mm.move(100, 210)
self.label_mm.setFixedSize(100, 30)
self.label_mm.setStyleSheet(label_wzbj)
self.label_mm.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignCenter)
self.label_qmm = QLabel(self)
self.label_qmm.setText("申请类型 :")
self.label_qmm.move(100, 250)
self.label_qmm.setFixedSize(100, 30)
self.label_qmm.setStyleSheet(label_wzbj)
self.label_qmm.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignCenter)
# 默认为空
self.info1 = ''
self.rb11 = QRadioButton(' CRM系统', self)
self.rb11.move(210, 170)
self.rb11.setFixedSize(130, 30)
self.rb11.setStyleSheet(label_wzbj)
self.rb12 = QRadioButton(' 经分系统', self)
self.rb12.move(345, 170)
self.rb12.setFixedSize(130, 30)
self.rb12.setStyleSheet(label_wzbj)
self.rb13 = QRadioButton(' 134系统', self)
self.rb13.move(480, 170)
self.rb13.setFixedSize(130, 30)
self.rb13.setStyleSheet(label_wzbj)
self.bg1 = QButtonGroup(self)
self.bg1.addButton(self.rb11, 11)
self.bg1.addButton(self.rb12, 12)
self.bg1.addButton(self.rb13, 13)
self.bg1.buttonClicked.connect(self.rbclicked)
# 籍贯选择省份
self.sr_mm = QComboBox(self)
self.sr_mm.addItems(['未知', '不详'])
self.sr_mm.move(210, 210)
self.sr_mm.setFixedSize(195, 30)
self.sr_mm.setStyleSheet(label_wzbj)
self.sr_mm.currentIndexChanged.connect(self.sr_mmx_bd)
# 籍贯选择地市
self.sr_mmx = QComboBox(self)
self.sr_mmx.addItems(['未知', '不详'])
self.sr_mmx.move(415, 210)
self.sr_mmx.setFixedSize(195, 30)
self.sr_mmx.setStyleSheet(label_wzbj)
# self.sr_mmx.currentIndexChanged.connect(self.sr_qmm_bd)
# 默认为空
self.info2 = ''
self.rb21 = QRadioButton(' 新增长期', self)
self.rb21.move(210, 250)
self.rb21.setFixedSize(130, 30)
self.rb21.setStyleSheet(label_wzbj)
self.rb22 = QRadioButton(' 临时放权', self)
self.rb22.move(345, 250)
self.rb22.setFixedSize(130, 30)
self.rb22.setStyleSheet(label_wzbj)
self.rb23 = QRadioButton(' 权限终止', self)
self.rb23.move(480, 250)
self.rb23.setFixedSize(130, 30)
self.rb23.setStyleSheet(label_wzbj)
self.bg2 = QButtonGroup(self)
self.bg2.addButton(self.rb21, 11)
self.bg2.addButton(self.rb22, 12)
self.bg2.addButton(self.rb23, 13)
self.bg2.buttonClicked.connect(self.rbclicked2)
#选择结束时间
self.label_lxdh = QLabel(self)
self.label_lxdh.setText("截止时间 :")
self.label_lxdh.move(100, 290)
self.label_lxdh.setFixedSize(100, 30)
self.label_lxdh.setStyleSheet(label_wzbj)
self.label_lxdh.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignCenter)
# 指定当前地日期为控件的日期,注意没有指定时间
self.dateEdit_y = QDateTimeEdit(QDate.currentDate(), self)
self.dateEdit_y.setDisplayFormat("yyyy")
self.dateEdit_y.move(210, 290)
self.dateEdit_y.setFixedSize(100, 30)
self.dateEdit_y.setStyleSheet(label_wzbj)
self.dateEdit_ysm = QLabel(self)
self.dateEdit_ysm.setText("年")
self.dateEdit_ysm.move(315, 290)
self.dateEdit_ysm.setFixedSize(25, 30)
self.dateEdit_ysm.setStyleSheet('font-size:18px;')
self.dateEdit_m = QDateTimeEdit(QDate.currentDate(), self)
self.dateEdit_m.setDisplayFormat("MM")
self.dateEdit_m.move(345, 290)
self.dateEdit_m.setFixedSize(100, 30)
self.dateEdit_m.setStyleSheet(label_wzbj)
self.dateEdit_msm = QLabel(self)
self.dateEdit_msm.setText("月")
self.dateEdit_msm.move(450, 290)
self.dateEdit_msm.setFixedSize(25, 30)
self.dateEdit_msm.setStyleSheet('font-size:18px;')
self.dateEdit_d = QDateTimeEdit(QDate.currentDate(), self)
self.dateEdit_d.setDisplayFormat("dd")
self.dateEdit_d.move(480, 290)
self.dateEdit_d.setFixedSize(100, 30)
self.dateEdit_d.setStyleSheet(label_wzbj)
self.dateEdit_dsm = QLabel(self)
self.dateEdit_dsm.setText("日")
self.dateEdit_dsm.move(585, 290)
self.dateEdit_dsm.setFixedSize(25, 30)
self.dateEdit_dsm.setStyleSheet('font-size:18px;')
self.label_emil = QLabel(self)
self.label_emil.setText("上传附件 :")
self.label_emil.move(100, 330)
self.label_emil.setFixedSize(100, 30)
self.label_emil.setStyleSheet(label_wzbj)
self.label_emil.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignCenter)
# 文件路径
self.wjlj_xs = QLabel(self)
self.wjlj_xs.setText("文件路径")
self.wjlj_xs.move(210, 330)
self.wjlj_xs.setFixedSize(350, 30)
self.wjlj_xs.setStyleSheet(label_wzbj)
self.wjlj_dk = QPushButton('文件', self)
self.wjlj_dk.move(565, 330)
self.wjlj_dk.setFixedSize(45, 30)
self.wjlj_dk.clicked.connect(self.wjlj_xz)
self.lbjm_dj = QPushButton('文件预览', self)
self.lbjm_dj.move(100, 370)
self.lbjm_dj.setFixedSize(100, 30)
self.lbjm_dj.clicked.connect(self.lb_jm)
self.lbjm_wjsm = QLabel(self)
self.lbjm_wjsm.setText("文件预览说明")
self.lbjm_wjsm.move(210, 370)
self.lbjm_wjsm.setFixedSize(400, 30)
self.lbjm_wjsm.setStyleSheet(label_wzbj)
# 右侧确认
self.label_zh_qr = QLabel(self)
self.label_zh_qr.setText("*")
self.label_zh_qr.move(620, 170)
self.label_zh_qr.setFixedSize(100, 30)
self.label_xm_qr = QLabel(self)
self.label_xm_qr.setText("*")
self.label_xm_qr.move(620, 210)
self.label_xm_qr.setFixedSize(100, 30)
self.label_mm_qr = QLabel(self)
self.label_mm_qr.setText("*")
self.label_mm_qr.move(620, 250)
self.label_mm_qr.setFixedSize(100, 30)
self.label_qmm_qr = QLabel(self)
self.label_qmm_qr.setText("*")
self.label_qmm_qr.move(620, 330)
self.label_qmm_qr.setFixedSize(100, 30)
# 同意协议并注册
self.bt1 = QPushButton('获取随机验证码', self)
self.bt1.move(100, 450)
self.bt1.setFixedSize(100, 30)
# 设定时间
self.count = 30
self.bt1.clicked.connect(self.Action)
self.time = QtCore.QTimer(self)
# 每秒1000毫秒
self.time.setInterval(1000)
# 时间到触发 Refresh
self.time.timeout.connect(self.Refresh)
# 随机码展示区
self.label_sjm = QLabel(self)
self.label_sjm.setText("随机码")
self.label_sjm.move(210, 450)
self.label_sjm.setFixedSize(60, 30)
self.label_sjm.setStyleSheet(label_wzbj)
self.label_sjm.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignCenter)
# 输入验证码
self.sr_yzm = QLineEdit(self)
self.sr_yzm.setPlaceholderText("请输入您的验证码")
self.sr_yzm.move(280, 450)
self.sr_yzm.setFixedSize(200, 30)
self.sr_yzm.setStyleSheet(label_wzbj)
# 同意协议并注册
self.bt2 = QPushButton('批量流程发起', self)
self.bt2.move(490, 450)
self.bt2.setFixedSize(120, 30)
self.bt2.clicked.connect(self.register)
self.label_zctg_qr = QLabel(self)
self.label_zctg_qr.setText("")
self.label_zctg_qr.move(620, 450)
self.label_zctg_qr.setFixedSize(100, 30)
self.show()
def register(self):
#先将标记还原
self.label_zh_qr.setText('*')
self.label_xm_qr.setText('*')
self.label_mm_qr.setText('*')
self.label_qmm_qr.setText('*')
if self.info1 == '':
self.label_zh_qr.setText('系统未选择')
elif self.sr_mmx.currentText() == '未知':
self.label_xm_qr.setText('申请权限为空')
elif self.info2 == '':
self.label_mm_qr.setText('类型未选择')
elif self.wjlj_xs.text() == '文件路径':
self.label_qmm_qr.setText('未上传文件路径')
elif len(self.sr_yzm.text()) == 0:
self.label_zctg_qr.setText('验证码为空')
elif self.label_sjm.text() != self.sr_yzm.text():
self.label_zctg_qr.setText('验证码不一致')
else:
self.label_zctg_qr.setText('提交通过')
def Action(self):
if self.bt1.isEnabled():
self.time.start()
self.bt1.setEnabled(False)
sjs = str(random.randint(0, 9999))
#如果随机码长度不够4位,前面补零
if len(sjs) < 4:
sjs = '0' * (4 - len(sjs)) + sjs
self.label_sjm.setText(sjs)
def Refresh(self):
if self.count > 0:
self.bt1.setText(str(self.count) + '秒后重发')
self.count -= 1
else:
self.time.stop()
self.bt1.setText('获取随机验证码')
self.bt1.setEnabled(True)
# 点击发送后 count 重置为30
self.count = 30
def lb_jm(self):
if self.wjlj_xs.text()=='文件路径':
msgBox = QMessageBox(QMessageBox.NoIcon, '关于', '文件路径不能为空')
msgBox.exec()
else:
data = xlrd.open_workbook(self.imgName)
# 通过表名限制
table = data.sheet_by_name('Sheet1')
# 共有多少行数据 # 共有多少列数据
self.lbjm_wjsm.setText('本文档拥有 %d 行,%d 列,共有 %d 个单元格' % (table.nrows,table.ncols,table.nrows * table.ncols))
self.wjyl = SecondUi(self.imgName)
self.wjyl.show()
def rbclicked(self):
sender = self.sender()
if sender == self.bg1:
if self.bg1.checkedId() == 11:
self.info1 = 'CRM系统'
self.sr_mm.clear()
self.sr_mm.addItems(['角色', '权限', '令牌'])
elif self.bg1.checkedId() == 12:
self.info1 = '经分系统'
self.sr_mm.clear()
self.sr_mm.addItem('角色')
elif self.bg1.checkedId() == 13:
self.info1 = '134系统'
self.sr_mm.clear()
self.sr_mm.addItem('角色')
else:
self.info1 = ''
#print(self.info1)
def rbclicked2(self):
sender = self.sender()
if sender == self.bg2:
if self.bg2.checkedId() == 11:
self.info2 = '新增长期'
self.dateEdit_y.setDate(QDate.fromString('2050-01-01', 'yyyy-MM-dd'))
self.dateEdit_m.setDate(QDate.fromString('2050-01-01', 'yyyy-MM-dd'))
self.dateEdit_d.setDate(QDate.fromString('2050-01-01', 'yyyy-MM-dd'))
elif self.bg2.checkedId() == 12:
self.info2 = '临时放权'
self.dateEdit_y.setDate(QDate.currentDate())
self.dateEdit_m.setDate(QDate.currentDate())
self.dateEdit_d.setDate(QDate.currentDate().addDays(3))
elif self.bg2.checkedId() == 13:
self.info2 = '权限终止'
self.dateEdit_y.setDate(QDate.currentDate())
self.dateEdit_m.setDate(QDate.currentDate())
self.dateEdit_d.setDate(QDate.currentDate())
else:
self.info1 = ''
#print(self.info1)
def sr_mmx_bd(self):
#循环获取省市关系表
if self.info1 == 'CRM系统' and self.sr_mm.currentText() =='角色':
self.sr_mmx.clear()
self.sr_mmx.addItems(['角色1', '角色2', '角色3'])
elif self.info1 == 'CRM系统' and self.sr_mm.currentText() =='权限':
self.sr_mmx.clear()
self.sr_mmx.addItems(['权限1', '权限2', '权限3'])
elif self.info1 == 'CRM系统' and self.sr_mm.currentText() =='令牌':
self.sr_mmx.clear()
self.sr_mmx.addItems(['令牌1', '令牌2', '令牌3'])
elif self.info1 == '经分系统' and self.sr_mm.currentText() == '角色':
self.sr_mmx.clear()
self.sr_mmx.addItems(['经分角色1', '经分角色2', '经分角色3'])
elif self.info1 == '134系统' and self.sr_mm.currentText() == '角色':
self.sr_mmx.clear()
self.sr_mmx.addItems(['134角色1', '134角色2', '134角色3'])
def wjlj_xz(self):
# "*.jpg;;*.png;;All Files(*)" 是在打开窗体下显示的类型
self.imgName, imgType = QFileDialog.getOpenFileName(self, "打开文件", "", "*.xls;;All Files(*)")
# 打开文件路径 并被拉伸到窗体显示大小
self.wjlj_xs.setText(self.imgName)
class SecondUi(QWidget):
def __init__(self,a):
super(SecondUi, self).__init__()
#定义文件的宽高变量
self.wjyl_k = 0
self.wjyl_g = 0
#获取文件名
self.wjlj_m = a
print(self.wjlj_m)
data = xlrd.open_workbook(self.wjlj_m)
# 通过表名限制
table = data.sheet_by_name('Sheet1')
# 共有多少行数据
self.wjyl_g = table.nrows
# 共有多少列数据
self.wjyl_k = table.ncols
self.shuzu = {}
i = 0
while i < self.wjyl_g:
itema = table.row_values(i)
itema_zd = {i: itema}
self.shuzu.update(itema_zd)
i += 1
self.init_ui()
def init_ui(self):
self.resize(800, 600)
self.setWindowTitle('文件预览')
self.setStyleSheet("background-color:rgb(135,206,235)")
layout = QVBoxLayout()
# 表格
self.table_widget = QTableWidget(self.wjyl_g, self.wjyl_k) # 行数,列数
self.table_widget.setFixedSize(800, 600) # 宽度,高度
self.table_widget.setHorizontalHeaderLabels(['序列', '姓名', '标题', '邮箱'])
for t in range(self.wjyl_k):
self.table_widget.setColumnWidth(t, 800/self.wjyl_k )
# 添加数据
for i in range(self.wjyl_g):
for t in range(self.wjyl_k):
if self.shuzu[i][t] is None or self.shuzu[i][t] == '':
newItem = QTableWidgetItem('无数据')
elif t == 0:
newItem = QTableWidgetItem(str(self.shuzu[i][t]))
elif t == 4:
newItem = QTableWidgetItem(self.shuzu[i][t].strftime('%Y-%m-%d %H:%M:%S'))
else:
newItem = QTableWidgetItem(str(self.shuzu[i][t]))
self.table_widget.setItem(i, t, newItem)
self.table_widget.setEditTriggers(QAbstractItemView.NoEditTriggers) # 表格内容只读
self.table_widget.setSelectionBehavior(QAbstractItemView.SelectRows) # 点击选择整行
layout.addWidget(self.table_widget)
self.setLayout(layout)
#self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())