# -*- coding: utf-8 -*-
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import Qt, QFileDialog, QMessageBox, QStandardItemModel,/
QModelIndex, QAbstractItemView, QThread, QProgressDialog
from ftpFun import ftpInterface
from ftpXML import ftpXml
import os
class PGThread(QThread):
_signal = QtCore.pyqtSignal(int)
pgValue = 0
def __init__(self, parent = None):
QThread.__init__(self, parent)
self._signal.connect(self.parent().setPgValue)
def initTask(self, curInfoL, taskID):
self.curInfo = curInfoL
self.taskID = taskID
'''taskID = 1 upload taskID = 2 remove taskID = 3 rename'''
#self.pgdlg.exec_()
def run(self):
row = 0
strInfo = ''
step = int(100 / len(self.curInfo))
tmpValue = step
isContinue = True
for cur in self.curInfo:
print(cur)
if(isContinue):
ftpObj = ftpInterface(cur['ip'], 21, 'xxx', 'xxxxx')
ftpObj.setlocalPath('')
if(self.taskID == 1):
upFilePath = self.parent().folderLineEdit.text()
print(upFilePath)
ret = ftpObj.ftpUpLoadFile(upFilePath)
if(ret == -1):
isContinue = False
strInfo = "未找到/voicePrompt/1文件夹"
elif(ret == -3):
isContinue = False
strInfo = "请检查输入路径下无文件数据"
elif(ret == -2):
strInfo = "上传时出现异常"
else:
strInfo = "文件已上传请检查"
elif(self.taskID == 2):
removePath = self.parent().folderLineEdit.text()
ret = ftpObj.ftpRemoveFile(removePath)
if(ret == -1):
isContinue = False
strInfo = "未找到/voicePrompt/1文件夹"
elif(ret == -2):
strInfo = "删除时出现异常有可能文件不存在"
else:
strInfo = "文件已删除请检查"
elif(self.taskID == 3):
beforeName = self.parent().beforeLineEdit.text()
afterName = self.parent().afterLineEdit.text()
tmpName = os.path.basename(afterName)
dirName = os.path.dirname(beforeName)
aName = dirName + '//' + tmpName
ret = ftpObj.ftpRenameFile(beforeName, aName)
if(ret == -1):
isContinue = False
strInfo = "未找到/voicePrompt/1文件夹"
elif(ret == -2):
strInfo = "修改时出现异常有可能文件不存在"
else:
strInfo = "文件已修改请检查"
self.parent().Model.setData(self.parent().Model.index(row, 0, QModelIndex()), cur['name'])
self.parent().Model.setData(self.parent().Model.index(row, 1, QModelIndex()), strInfo)
row += 1
tmpValue += step
tmpValue += 1
self._signal.emit(tmpValue)
print(tmpValue)
self.parent().logTbView.setModel(self.parent().Model)
class Ui_Ftp(object):
def setupUi(self, Ftp):
self.retranslateUi(Ftp)
QtCore.QMetaObject.connectSlotsByName(Ftp)
'''设置最小化按钮'''
self.setWindowFlags(Qt.Widget)
#self.setWindowFlags(Qt.WindowMaximizeButtonHint)
self.radioButton.setChecked(True)
self.ftpPathLineEdit.setText("/voicePrompt/1")
#self.ftpPathLineEdit.setDisabled(True)
self.ftpPathLineEdit.setReadOnly(True)
self.hideRenameElemt(False)
self.ckBoxList = [];
self.checkBoxSignal()
'''信号和槽'''
self.allCheckBtn.clicked.connect(self.allCheckBtnClicked)
self.clearBtn.clicked.connect(self.clearBtnClicked)
self.isShowArea = False
self.areaShwoBtn.clicked.connect(self.areaShowBtnClicked)
self.openBtn.clicked.connect(self.openBtnClicked)
self.execBtn.clicked.connect(self.execBtnClicked)
'''operator'''
self.radioButton.clicked['bool'].connect(self.upLoadSetting)
self.radioButton_2.clicked['bool'].connect(self.RemoveFileSetting)
self.radioButton_3.clicked['bool'].connect(self.RenameFileSetting)
'''ftp ip info'''
ftpX = ftpXml()
self.ipInfo = ftpX.getServerInfo()
'''exec log'''
'''设置qtabview'''
self.Model = QStandardItemModel()
def setPgValue(self, value):
if(value >= 100):
self.pg.close()
return
self.pg.setValue(value)
'''具体执行操作'''
def execBtnClicked(self):
ret = self.execLimit()
if(ret == -1):
return
curInfoL = self.getAreaIpInfo()
if(not curInfoL):
QMessageBox.warning(self, '错误', '请检查serverinfo.xml是否存在', QMessageBox.Ok)
return
pt = PGThread(self)
self.pg = QProgressDialog()
self.pg.setModal(True)
self.pg.show()
self.Model.clear()
self.Model.setRowCount(len(curInfoL))
self.Model.setColumnCount(2)
self.Model.setHorizontalHeaderLabels(['地区', '执行情况'])
self.logTbView.setEditTriggers(QAbstractItemView.NoEditTriggers)
self.logTbView.update()
taskId = 0
pgTitle = ''
if(self.radioButton.isChecked()):
taskId = 1
pgTitle = "正在上传..."
elif(self.radioButton_2.isChecked()):
taskId = 2
pgTitle = "正在上传..."
elif(self.radioButton_3.isChecked()):
taskId = 3
pgTitle = "正在修改..."
self.pg.setWindowTitle(pgTitle)
self.pg.setLabelText("请稍后...")
self.pg.setCancelButton(None)
self.pg.setWindowFlags(Qt.WindowMinimizeButtonHint)
pt.initTask(curInfoL, taskId)
pt.start()
def getAreaIpInfo(self):
areaStr = self.areaLineEdit.text()
areaList = areaStr.split('、')
'''find areaIp in self.ipinfo'''
curInfo = []
for area in areaList:
for ftpArea in self.ipInfo:
if(area == ftpArea['name']):
ip = ftpArea['ip']
curInfo.append(ftpArea)
break
return curInfo
def execLimit(self):
if(self.areaLineEdit.text() == ""):
QMessageBox.information(self, "提示", "请输入地区,多个地区用'、'隔开", QMessageBox.Ok)
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/8099.html