您说得对,在主线程执行 GUI 时让工作线程执行处理是一件好事。此外,PyQt 还为线程检测提供了线程安全的信号/槽机制。
这听起来可能很有趣。在他们的示例中,他们构建了一个 GUI
import sys, time
from PyQt4 import QtCore, QtGui
class MyApp(QtGui.QWidget):
 def __init__(self, parent=None):
  QtGui.QWidget.__init__(self, parent)
  self.setGeometry(300, 300, 280, 600)
  self.setWindowTitle('threads')
  self.layout = QtGui.QVBoxLayout(self)
  self.testButton = QtGui.QPushButton("test")
  self.connect(self.testButton, QtCore.SIGNAL("released()"), self.test)
  self.listwidget = QtGui.QListWidget(self)
  self.layout.addWidget(self.testButton)
  self.layout.addWidget(self.listwidget)
 def add(self, text):
  """ Add item to list widget """
  print "Add: " + text
  self.listwidget.addItem(text)
  self.listwidget.sortItems()
 def addBatch(self,text="test",iters=6,delay=0.3):
  """ Add several items to list widget """
  for i in range(iters):
   time.sleep(delay) # artificial time delay
   self.add(text+" "+str(i))
 def test(self):
  self.listwidget.clear()
  # adding entries just from main application: locks ui
  self.addBatch("_non_thread",iters=6,delay=0.3)
(简单的 ui 包含一个列表小部件,我们将通过单击按钮向其中添加一些项目)
然后你可以创建我们自己的线程类,一个例子是
class WorkThread(QtCore.QThread):
 def __init__(self):
  QtCore.QThread.__init__(self)
 def __del__(self):
  self.wait()
 def run(self):
  for i in range(6):
   time.sleep(0.3) # artificial time delay
   self.emit( QtCore.SIGNAL('update(QString)'), "from work thread " + str(i) )
  self.terminate()
你确实重新定义了run()方法。您可以找到 的替代方法terminate(),请参阅教程。