Моя программа копирует шаблон Excel, редактирует его с помощью xlwings, и когда процесс завершится, она должна переместить папку.
Я использую QThread, чтобы сделать это в фоновом режиме, чтобы мой графический интерфейс не зависал.
В настоящее время я получаю ошибку shutil при перемещении файла, потому что файл не полностью завершил обработку, прежде чем он перемещает его.Я знаю это, потому что после того, как я снова попробую кнопку сохранения, она будет делать то, что ей нужно.
Я пытался использовать метод времени, чтобы поспать несколько секунд, пока процесс не будет завершен, но это занимает слишком много времени.
Ошибка:
- shutil.Error: [('C: \ Workspace \ Test \ Case1 \ ~ $ Case1.xlsx', 'E: / Test / Case1 \ ~ $ Case1.xlsx ', "[Errno 2] Нет такого файла или каталога:' C: \\ Workspace \\ Test \\ Case1 \\ ~ $ Case1.xlsx '")]
Это немой полный код, так как у меня есть тысячи строк кода, я просто показываю, как я выполняю свою функцию.
class SaveThread(QtCore.QThread):
saveSignal = pyqtSignal()
def __init__(self, parent = None):
super().__init__(parent)
def run(self):
newcase = newcaseList[-1]
book = xw.Book(r'{0}\Template_VS.xlsx'.format(TemplateDirectory[-1]))
#do something with excel sheet
book.save(r'{0}\{1}\{1}.xlsx'.format(SelectedDirectory[-1], newcase))
self.saveSignal.emit()
class TabPage(QWidget, Ui_Form):########Pulls Ui from another class
'GUI for stage information - ex. sheet1, 2'
def __init__(self, parent=None):
super().__init__(parent)
self.setupUi(self)
self.pushButton_3.clicked.connect(self.SaveRun)
self.saveThread = SaveThread()
self.saveThread.finished.connect(self.moveFolder)
saveDirectory = []
appList = []
newcaseList = ['C:\\Workspace\\']
InitialDirectory = ['C:\\Workspace\\Test\\']
def moveFolder(self):
appList[-1].kill()
newcase = newcaseList[-1]
shutil.move('{0}\{1}'.format(InitialDirectory[-1], newcase), '{0}/{1}'.format(saveDirectory[-1], newcase)) ### Error occurs here because file isn't done processing.
def SaveRun(self):
'Save Run File to directory'
directory = str(QFileDialog.getExistingDirectory(self, "Select Directory"))
saveDirectory.append(directory)
app = xw.App(visible=False)
appList.append(app)
Я хочу, чтобы он дождался полной обработки листа Excel, прежде чем он переместится, как это сделать?Я уверен, что он делает это без метода time.sleep?