Python 从修改的线程类设置QTableWidgetItem

Python 从修改的线程类设置QTableWidgetItem,python,multithreading,pyqt5,python-multithreading,Python,Multithreading,Pyqt5,Python Multithreading,我有一个特定的PyQt5项目。在这个项目中,我需要同时做一些事情,因此使用线程。由于作业有时必须根据用户的要求取消,因此我使用了一个修改过的线程类(据我所知,该线程是可跟踪的,因此可能在任何时候被终止),我设法在线查找: class thread_with_trace(threading.Thread): def __init__(self, *args, **keywords): threading.Thread.__init__(self, *args, **keywords

我有一个特定的
PyQt5
项目。在这个项目中,我需要同时做一些事情,因此使用线程。由于作业有时必须根据用户的要求取消,因此我使用了一个修改过的线程类(据我所知,该线程是可跟踪的,因此可能在任何时候被终止),我设法在线查找:

class thread_with_trace(threading.Thread): 
  def __init__(self, *args, **keywords): 
    threading.Thread.__init__(self, *args, **keywords) 
    self.killed = False
    
  def start(self): 
    self.__run_backup = self.run 
    self.run = self.__run       
    threading.Thread.start(self) 
  
  def __run(self): 
    sys.settrace(self.globaltrace) 
    self.__run_backup() 
    self.run = self.__run_backup 
  
  def globaltrace(self, frame, event, arg): 
    if event == 'call': 
      return self.localtrace 
    else: 
      return None
  
  def localtrace(self, frame, event, arg): 
    if self.killed: 
      if event == 'line': 
        raise SystemExit() 
    return self.localtrace 
  
  def kill(self): 
    self.killed = True
当点击GUI上的某个按钮时,我使用这个修改过的线程:

    self.t =thread_with_trace(target = self.runClicked) 
    self.t.start()
self.runClicked
中,我必须设置
QTableWidgetItem
self.runClicked
还使用其他函数来更改
QTableWidgetItem
)。例如:

 def runClicked(self):
            self.ui.results_table.clear()
            while (self.ui.results_table.rowCount() > 0):
                self.ui.results_table.removeRow(0)
            self.ui.results_table.setHorizontalHeaderItem(0, QtWidgets.QTableWidgetItem("Freq (Hz)"))
            self.ui.results_table.setHorizontalHeaderItem(1, QtWidgets.QTableWidgetItem("Current (A)"))
            self.ui.results_table.setHorizontalHeaderItem(2, QtWidgets.QTableWidgetItem("Mag. Field (mG)"))
当我使用线程运行此函数时,会收到两种类型的消息(但它们会重复很多次,可能是因为我经常更改表…):

QObject::connect:无法对“Qt::Orientation”类型的参数进行排队
(确保使用qRegisterMetaType()注册了“Qt::Orientation”。)
QObject::connect:无法对类型为“QVector”的参数排队
(确保使用qRegisterMetaType()注册了“QVector”。)
当我尝试更改标签或按钮的文本时,不会产生此问题

我在网上查看了一下,发现唯一“允许”在GUI中进行任何更改的线程是GUI创建的主线程本身(如果我在这一点上有错误,请纠正我),我应该以某种方式使用
dataChanged

QObject::connect: Cannot queue arguments of type 'Qt::Orientation'
(Make sure 'Qt::Orientation' is registered using qRegisterMetaType().)
QObject::connect: Cannot queue arguments of type 'QVector<int>'
(Make sure 'QVector<int>' is registered using qRegisterMetaType().)