我有一个pyqt4 gui,允许我导入多个.csv文件。我创建了一个循环,遍历这个具有以下参数(filename + location of file, filename, bool,bool, set of dates in file)=tup
的元组列表。
我已经创建了几个我的gui经常引用的类,以便从项目配置文件中提取参数。我们打电话给这个班级profile()
。我还有另一个具有许多基于格式的函数的类,例如日期时间,文本编辑等等......让我们调用这个类MyFormatting()
。然后我创建了一个为列表中的每个文件创建的QThread
类,这个类名为Import_File(QThread)
。并且假设这个类为__init__(self,tup)
提供了一些参数。
我的理想目标是能够为MyFormatting()
创建profile()
和Import_File(QThread)
的独立实例。我试图了解如何利用QObject功能来解决这个问题。但是我仍然在运行时遇到线程被破坏的错误。
for tup in importedlist:
importfile = Import_File(tup)
self.connect(importfile,QtCore.SIGNAL('savedfile(PyQt_PyObject()'),self.printstuffpassed)
importfile.start()
我在考虑将这两个类声明为
MyFormatting(QObject):
def __init__(self):
QObject.__init__(self)
def func1(self,stuff):
dostuff
def func2(self):
morestuff
profile(QObject):
def __init__(self):
QObject.__init__(self)
def func11(self,stuff):
dostuff
def func22(self):
morestuff
和QThread:
Import_File(QThread):
def __init__(self,tup):
QThread.__init(self)
common_calc_stuff = self.calc(tup[4])
f = open(tup[0] + '.csv', 'w')
self.tup = tup
# this is where I thought of pulling an instance just for this thread
self.MF = MyFormatting()
self.MF_thread = QtCore.QThread()
self.MF.moveToThread(self.MF_thread)
self.MF_thread.start()
self.prof = profile()
self.prof_thread = QtCore.QThread()
self.prof.moveToThread(self.prof_thread)
self.prof_thread.start()
def func33(self,stuff):
dostuff
self.prof.func11(tup[4])
def func44(self):
morestuff
def run(self):
if self.tup[3] == True:
self.func33
self.MF.func2
elif self.tup[3] ==False:
self.func44
if self.tup[2] == True:
self.prof.func22
self.emit(QtCore.SIGNAL('savedfile()',)
我是否完全以错误的方式思考它?我如何能够保持与编码相同的结构,并且仍然能够实现多线程并且不能同时使用相同的资源,我认为这是我的qui不断崩溃的原因?或者,我如何确保关闭这些对象的每个实例,使其不会干扰其他实例?