我正在尝试创建一个简单的线程应用程序,其中有一个方法执行一些长时间处理的任务,一个小部件显示加载条和取消按钮。
我的问题是,无论我如何实现线程,它都不会真正地进行线程操作 - 一旦线程开始,用户界面就会被锁定。我已经阅读了关于这个问题的所有教程和帖子,但我现在不知所措,只能向社区求助来解决我的问题!
最初我尝试了子类化QThread,直到互联网上说这样做是错误的。然后我尝试了moveToThread方法,但没有任何改进。
初始化代码:
任何帮助都将不胜感激!
谢谢。 Ben。
我的问题是,无论我如何实现线程,它都不会真正地进行线程操作 - 一旦线程开始,用户界面就会被锁定。我已经阅读了关于这个问题的所有教程和帖子,但我现在不知所措,只能向社区求助来解决我的问题!
最初我尝试了子类化QThread,直到互联网上说这样做是错误的。然后我尝试了moveToThread方法,但没有任何改进。
初始化代码:
loadingThreadObject = LoadThread(arg1)
loadingThread = PythonThread()
loadingThreadObject.moveToThread(loadingThread)
loadingThread.started.connect(loadingThreadObject.load)
loadingThread.start()
PythonThread类(显然QThreads在pyQt中存在缺陷,除非你这样做,否则不会启动):
class PythonThread (QtCore.QThread):
def __init__(self, parent=None):
QtCore.QThread.__init__(self, parent)
def start(self):
QtCore.QThread.start(self)
def run(self):
QtCore.QThread.run(self)
LoadThread类:
class LoadThread (QtCore.QObject):
results = QtCore.Signal(tuple)
def __init__ (self, arg):
# Init QObject
super(QtCore.QObject, self).__init__()
# Store the argument
self.arg = arg
def load (self):
#
# Some heavy lifting is done
#
loaded = True
errors = []
# Emits the results
self.results.emit((loaded, errors))
任何帮助都将不胜感激!
谢谢。 Ben。
qApp.processEvents()
或其他方法)。 - ekhumoro