Зависает программа при выполнении через PyQt5

я пытаюсь соединить алгоритм своей программы с графической оболочкой сделанной в Qt Designer. Но при запуске основного алгоритма (код представлен ниже) программа зависает, но выполняет алогоритм. При прохождении основного цикла в функции "start" необходимо изменять текст в одном из label, но этого не происходит, после завершения цикла выдается сообщение об ошибке и Python вылетает, как с этим бороться? Если честно это одна из моих первых программ составленных с помощью PyQt5, я так понимаю многие вещи можно оптимизировать если вынести настройки интерфейса в отдельный файл класса

    import os
import numpy as np
from PIL import Image
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QFileDialog
step = 0
def find_numbers(s):
  l = len(s)
  integ = []
  i = 0
  while i < l:
      s_int = ''
      a = s[i]
      while '0' <= a <= '9':
          s_int += a
          i += 1
          if i < l:
              a = s[i]
          else:
              break
      i += 1
      if s_int != '':
          integ.append(int(s_int))
  return(integ)
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(816, 601)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.verticalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(10, 0, 404, 231))
        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.folder_path_label = QtWidgets.QLabel(self.verticalLayoutWidget)
        font = QtGui.QFont()
        font.setPointSize(12)
        self.folder_path_label.setFont(font)
        self.folder_path_label.setObjectName("folder_path_label")
        self.verticalLayout.addWidget(self.folder_path_label)
        self.btn_browse_path_folder = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.btn_browse_path_folder.setObjectName("btn_browse_path_folder")
        self.verticalLayout.addWidget(self.btn_browse_path_folder)
        self.path1 = QtWidgets.QLabel(self.verticalLayoutWidget)
        self.path1.setText("")
        self.path1.setObjectName("path1")
        self.verticalLayout.addWidget(self.path1)
        self.save_path_label = QtWidgets.QLabel(self.verticalLayoutWidget)
        font = QtGui.QFont()
        font.setPointSize(12)
        self.save_path_label.setFont(font)
        self.save_path_label.setObjectName("save_path_label")
        self.verticalLayout.addWidget(self.save_path_label)
        self.btn_browse_save_folder = QtWidgets.QPushButton(self.verticalLayoutWidget)
        self.btn_browse_save_folder.setObjectName("btn_browse_save_folder")
        self.verticalLayout.addWidget(self.btn_browse_save_folder)
        self.path2 = QtWidgets.QLabel(self.verticalLayoutWidget)
        self.path2.setText("")
        self.path2.setObjectName("path2")
        self.verticalLayout.addWidget(self.path2)
        self.inf_label = QtWidgets.QLabel(self.centralwidget)
        self.inf_label.setGeometry(QtCore.QRect(430, 0, 211, 31))
        font = QtGui.QFont()
        font.setPointSize(15)
        self.inf_label.setFont(font)
        self.inf_label.setObjectName("inf_label")
        self.verticalLayoutWidget_2 = QtWidgets.QWidget(self.centralwidget)
        self.verticalLayoutWidget_2.setGeometry(QtCore.QRect(430, 20, 251, 211))
        self.verticalLayoutWidget_2.setObjectName("verticalLayoutWidget_2")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.verticalLayoutWidget_2)
        self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.count_frames_label = QtWidgets.QLabel(self.verticalLayoutWidget_2)
        font = QtGui.QFont()
        font.setPointSize(12)
        self.count_frames_label.setFont(font)
        self.count_frames_label.setObjectName("count_frames_label")
        self.verticalLayout_2.addWidget(self.count_frames_label)
        self.count_label = QtWidgets.QLabel(self.verticalLayoutWidget_2)
        font = QtGui.QFont()
        font.setPointSize(12)
        self.count_label.setFont(font)
        self.count_label.setText("")
        self.count_label.setObjectName("count_label")
        self.verticalLayout_2.addWidget(self.count_label)
        self.size_img_label = QtWidgets.QLabel(self.verticalLayoutWidget_2)
        font = QtGui.QFont()
        font.setPointSize(12)
        self.size_img_label.setFont(font)
        self.size_img_label.setObjectName("size_img_label")
        self.verticalLayout_2.addWidget(self.size_img_label)
        self.size_label = QtWidgets.QLabel(self.verticalLayoutWidget_2)
        font = QtGui.QFont()
        font.setPointSize(12)
        self.size_label.setFont(font)
        self.size_label.setText("")
        self.size_label.setObjectName("size_label")
        self.verticalLayout_2.addWidget(self.size_label)
        self.finish_label = QtWidgets.QLabel(self.verticalLayoutWidget_2)
        font = QtGui.QFont()
        font.setPointSize(12)
        self.finish_label.setFont(font)
        self.finish_label.setText("")
        self.finish_label.setObjectName("finish_label")
        self.verticalLayout_2.addWidget(self.finish_label)
        self.btn_start = QtWidgets.QPushButton(self.centralwidget)
        self.btn_start.setGeometry(QtCore.QRect(680, 20, 131, 141))
        font = QtGui.QFont()
        font.setPointSize(10)
        self.btn_start.setFont(font)
        self.btn_start.setObjectName("btn_start")
        self.verticalLayoutWidget_3 = QtWidgets.QWidget(self.centralwidget)
        self.verticalLayoutWidget_3.setGeometry(QtCore.QRect(10, 230, 791, 291))
        self.verticalLayoutWidget_3.setObjectName("verticalLayoutWidget_3")
        self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.verticalLayoutWidget_3)
        self.verticalLayout_3.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_3.setObjectName("verticalLayout_3")
        self.image_label = QtWidgets.QLabel(self.verticalLayoutWidget_3)
        self.image_label.setText("")
        self.image_label.setScaledContents(True)
        self.image_label.setObjectName("image_label")
        self.verticalLayout_3.addWidget(self.image_label)
        self.gridLayoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.gridLayoutWidget.setGeometry(QtCore.QRect(470, 530, 321, 42))
        self.gridLayoutWidget.setObjectName("gridLayoutWidget")
        self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget)
        self.gridLayout.setContentsMargins(0, 0, 0, 0)
        self.gridLayout.setObjectName("gridLayout")
        self.status_label = QtWidgets.QLabel(self.gridLayoutWidget)
        font = QtGui.QFont()
        font.setPointSize(12)
        self.status_label.setFont(font)
        self.status_label.setObjectName("status_label")
        self.gridLayout.addWidget(self.status_label, 0, 1, 1, 1)
        self.steps_status_label = QtWidgets.QLabel(self.gridLayoutWidget)
        font = QtGui.QFont()
        font.setPointSize(12)
        self.steps_status_label.setFont(font)
        self.steps_status_label.setText("")
        self.steps_status_label.setObjectName("steps_status_label")
        self.gridLayout.addWidget(self.steps_status_label, 0, 2, 1, 1)
        self.gridLayoutWidget_2 = QtWidgets.QWidget(self.centralwidget)
        self.gridLayoutWidget_2.setGeometry(QtCore.QRect(10, 530, 441, 41))
        self.gridLayoutWidget_2.setObjectName("gridLayoutWidget_2")
        self.gridLayout_3 = QtWidgets.QGridLayout(self.gridLayoutWidget_2)
        self.gridLayout_3.setContentsMargins(0, 0, 0, 0)
        self.gridLayout_3.setObjectName("gridLayout_3")
        self.progress_label = QtWidgets.QLabel(self.gridLayoutWidget_2)
        font = QtGui.QFont()
        font.setPointSize(12)
        self.progress_label.setFont(font)
        self.progress_label.setObjectName("progress_label")
        self.gridLayout_3.addWidget(self.progress_label, 0, 0, 1, 1)
        self.progressBar = QtWidgets.QProgressBar(self.gridLayoutWidget_2)
        self.progressBar.setProperty("value", 24)
        self.progressBar.setObjectName("progressBar")
        self.gridLayout_3.addWidget(self.progressBar, 0, 1, 1, 1)
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
        self.btn_browse_path_folder.clicked.connect(self.browsefiles1) # если нажал на кнопку для указания пути к папкам 12345
        self.btn_browse_save_folder.clicked.connect(self.browsefiles2) # если нажал на кнопку для указания пути сохранения
        self.btn_start.clicked.connect(self.start)
    #-------------------------#
    def browsefiles1(self):
        filename = QFileDialog.getExistingDirectory(None,"Выбрать папку",".")
        self.path1.setText(filename)
        folder_path = filename
        num_files = len([f for f in os.listdir(folder_path + '/1')
                         if os.path.isfile(os.path.join(folder_path + '/1', f))])
        self.count_label.setText(str(num_files))
        img_test = Image.open(folder_path + '/empty.tif')
        (width, heighth) = img_test.size
        #print(width, heighth)
        self.size_label.setText(str(width)+'px'+' X '+str(heighth)+'px')
    #-------------------------#
    def browsefiles2(self):
        filename = QFileDialog.getExistingDirectory(None,"Выбрать папку",".")
        self.path2.setText(filename)
    # методы для открытия обзорщика файлов и выбора папки
    #-------------------------#
    def start(self):
        global string_step
        s = self.size_label.text()
        column = int(find_numbers(s)[0])
        row = int(find_numbers(s)[1])
        count = 2  # количество столбиков, которое нужно взять
        num_files = int(self.count_label.text())
        folder_path = self.path1.text()
        save_path = self.path2.text()
        for step in range(0, num_files+1):
            if step < 10:
                string_step = '000' + str(step)
            if (step >= 10) and (step < 100):
                string_step = '00' + str(step)
            if (step >= 100):
                string_step = '0' + str(step)
            img0 = np.array(Image.open(folder_path + '/empty.tif').convert('RGB'))
            img1 = np.array(Image.open(folder_path + '/1/folder1w' + string_step + '.tif').convert('RGB'))
            img2 = np.array(Image.open(folder_path + '/2/folder2w' + string_step + '.tif').convert('RGB'))
            img3 = np.array(Image.open(folder_path + '/3/folder3w' + string_step + '.tif').convert('RGB'))
            img4 = np.array(Image.open(folder_path + '/4/folder4w' + string_step + '.tif').convert('RGB'))
            img5 = np.array(Image.open(folder_path + '/5/folder5w' + string_step + '.tif').convert('RGB'))
            # с какой строчки начинаем (0,2,4,6,8)
            space = 8  # 8 промежуток между столбцами
            first_column = 0
            for i in range(first_column, column, space + 2):
                for j in range(0, row):
                    img0[j][i + count - 1] = img1[j][i + count - 1]
                    img0[j][i] = img1[j][i]
            first_column = 2
            for i in range(first_column, column, space + 2):
                for j in range(0, row):
                    img0[j][i + count - 1] = img2[j][i + count - 1]
                    img0[j][i] = img2[j][i]
            first_column = 4
            for i in range(first_column, column, space + 2):
                for j in range(0, row):
                    img0[j][i + count - 1] = img3[j][i + count - 1]
                    img0[j][i] = img3[j][i]
            first_column = 6
            for i in range(first_column, column, space + 2):
                for j in range(0, row):
                    img0[j][i + count - 1] = img4[j][i + count - 1]
                    img0[j][i] = img4[j][i]
            first_column = 8
            for i in range(first_column, column, space + 2):
                for j in range(0, row):
                    img0[j][i + count - 1] = img5[j][i + count - 1]
                    img0[j][i] = img5[j][i]
            img = Image.fromarray(img0, 'RGB')
            self.steps_status_label.setText(str(step) + ' из ' + str(num_files))
            #print(str(step+1) + ' из ' + str(num_files))
            img.save(save_path + '/frame' + str(step) + '.jpg')
    #-------------------------#
    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.folder_path_label.setText(_translate("MainWindow", "Введите путь к папкам с изображениями"))
        self.btn_browse_path_folder.setText(_translate("MainWindow", "Обзор"))
        self.save_path_label.setText(_translate("MainWindow", "Введите путь для сохранения изображений"))
        self.btn_browse_save_folder.setText(_translate("MainWindow", "Обзор"))
        self.inf_label.setText(_translate("MainWindow", "Информация:"))
        self.count_frames_label.setText(_translate("MainWindow", "Количество кадров:"))
        self.size_img_label.setText(_translate("MainWindow", "Размер изображений:"))
        self.btn_start.setText(_translate("MainWindow", "Начать обработку"))
        self.status_label.setText(_translate("MainWindow", "Статус:"))
        self.progress_label.setText(_translate("MainWindow", "Прогресс:"))
if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

Ответы (0 шт):