title: PyQt5; Problem with QRunnable and QThreadPool
body: <p>Referring to:</p>
  <p><a href="https://stackoverflow.com/questions/58327821/how-to-pass-parameters-to-pyqt-qthreadpool-running-function">How to pass parameters to PyQt QThreadPool running function</a></p>
  <p>I am trying to apply the above topic to my code to avoid GUI freezing, the issue that fails to create a pushbutton within the TableWedgit in fn(push) and (setCellWidget) when using the fn(Run) when pressing &quot;PushButton&quot;, while it is fine with fn(run) when pressing&quot;RadioButton&quot; with a GUI freezing.</p>
  <p>All the files are available via the link:</p>
  <p><a href="https://drive.google.com/file/d/1fE7NkX9y1SFTHDuZWZZxh_NiL-msiZbT/view?usp=sharing" rel="nofollow noreferrer">https://drive.google.com/file/d/1fE7NkX9y1SFTHDuZWZZxh_NiL-msiZbT/view?usp=sharing</a></p>
  <pre><code>import os
  import sys
  import traceback
  from time import sleep
  
  import openpyxl
  import pandas
  import pandas as pd
  import xlsxwriter
  from PyQt5 import QtWidgets
  from PyQt5.QtGui import *
  from PyQt5.QtWidgets import *
  from PyQt5.QtCore import *
  from openpyxl import load_workbook
  
  from loop_150 import Ui_Form
  
  class WorkerSignals(QObject):
      finished = pyqtSignal()
      error = pyqtSignal(tuple)
      result = pyqtSignal(object)
      progress = pyqtSignal(int)
  
  class Worker(QRunnable):
  
      def __init__(self, fn):
          super(Worker, self).__init__()
  
          self.fn = fn
          self.signals = WorkerSignals()
  
  
      @pyqtSlot()
      def run(self):
         try:
              result = self.fn()
         except Exception as e:
             print('Worker(QRunnable):', e)
  
  class PushButton(QtWidgets.QPushButton):
      def __init__(self, object_name):
          super(PushButton, self).__init__()
          self.setObjectName(str(object_name))
  
  class Form(QWidget, Ui_Form):
      def __init__(self):
          QWidget.__init__(self)
          self.setupUi(self)
  
          self.radioButton.clicked.connect(self.run)
          self.pushButton.clicked.connect(self.Run)
          self.tableWidget_1.itemChanged.connect(self.ItemChanged)
  
          self.threadpool = QThreadPool()
  
      def run(self):
          df0 = self.excel_to_df('trade_ratio_dffx0')
          df1 = self.excel_to_df('trade_ratio_dffx1')
          df2 = self.excel_to_df('trade_ratio_dffx2')
          df3 = self.excel_to_df('trade_ratio_dffx3')
          i = 0
          x = 0
          y =1
          z =2
          m = 3
  
          self.previous_item = []
          while i &lt; 10:
              self.textBrowser.append(str(i))
              app.processEvents()
              sleep(1)
  
              if i == x:
                  df = df3
              if i == y:
                  df = df1
              if i == z:
                  df = df2
              if i == m:
                  df = df0
                  x += 4
                  y += 4
                  z += 4
                  m += 4
  
              i += 1
              table = self.tableWidget_1
              self.table_view(df, table)
              self.push()
              self.previous_item = []
              for items in df['balance']:
                  self.previous_item.append(items)
              app.processEvents()
      def Run(self):
          worker = Worker(self.run)
          self.threadpool.start(worker)
  
      def push(self):
          try:
              for row in range(1, self.tableWidget_1.rowCount()):
                  pushButton = PushButton(row)
                  self.tableWidget_1.setCellWidget(row, 3, pushButton)
                  r = self.tableWidget_1.item(row, 3).text()
                  if float(r) &gt; 0:
                      pushButton.setStyleSheet(&quot;background:rgb(0, 188, 138);color:rgb(255, 255, 255)&quot;)
                  elif float(r) == 0:
                      pushButton.setStyleSheet(&quot;background:rgb(185, 185, 185);color:rgb(255, 255, 255)&quot;)
                  else:
                      pushButton.setStyleSheet(&quot;background:rgb(255, 5, 72);color:rgb(255, 255, 255)&quot;)
                  pushButton.setText(r + '%')
          except Exception as e:
              print('push', e)
      def ItemChanged(self, item):
          try:
              for row in range(1, self.tableWidget_1.rowCount()):
                  if item.column() == 1 and self.tableWidget_1.item(row, 1).text() != None:
                      if float(self.tableWidget_1.item(row, 1).text()) &lt; 0:
                          self.tableWidget_1.item(row, 1).setForeground(QColor(255, 0, 100, 200))
                      elif float(self.tableWidget_1.item(row, 1).text()) &gt; 0:
                          self.tableWidget_1.item(row, 1).setForeground(QColor(0, 222, 122, 222))
                      elif float(self.tableWidget_1.item(row, 1).text()) == 0:
                          self.tableWidget_1.item(row, 1).setForeground(QColor(0, 0, 0, 150))
          except:
              pass
    
      def excel_to_df(self, wbkName):
          while True:
              try:
                  wbkName = wbkName + &quot;.xlsx&quot;
                  df = pd.read_excel(wbkName)
                  try:
                      df = df.drop(columns=['Index'])
                  except:
                      pass
                  try:
                      df = df.drop(columns=['index'])
                  except:
                      pass
                  try:
                      df = df.drop(columns=[0])
  
                  except:
                      pass
                  try:
                      df = df.drop(columns=['Unnamed: 0'])
                  except:
                      pass
                  try:
                      df = df.drop(columns=['Unnamed'])
                  except:
                      pass
                  try:
                      df = df.drop(columns=['0'])
                  except:
                      pass
                  try:
                      df = df.drop(columns=['Unnamed:'])
                  except:
                      pass
                  return df
              except:
                  pass
      def table_view(self, df, table):
          col_number = len(df.columns)
          table.setColumnCount(col_number)
          table.setRowCount(0)
          table.insertRow(0)
          for row_number in range(len(df)):
              table.insertRow(row_number + 1)
              for col_number, col_data in enumerate(df):
                  table.setItem(0, col_number, QtWidgets.QTableWidgetItem(str(col_data)))
                  table.setItem(row_number + 1, col_number, QtWidgets.QTableWidgetItem(str(df[col_data][row_number])))
                  header = table.horizontalHeader()
                  header.setSectionResizeMode(col_number, QtWidgets.QHeaderView.Stretch)
  
  app = QApplication(sys.argv)
  window = Form()
  window.show()
  app.exec_()
  </code></pre>