Немного изменил пример:
# _*_ coding: utf-8 _*_
import sys, time
from threading import Thread
from PyQt4 import QtCore, QtGui
from PyQt4.QtCore import QObject, SIGNAL
class TextThread(Thread):
def __init__(self, name, *args):
self.counter=0
self.name=name
super(TextThread, self).__init__(*args)
self.emitter = QObject()
def run(self):
while self.counter < 20:
print self.name, self.counter
self.emitter.emit(SIGNAL('BLA_BLA'), self.name)
self.counter = self.counter + 1
time.sleep(0.1)
class MainWindow(QtGui.QMainWindow):
def __init__(self, *args):
apply(QtGui.QMainWindow.__init__, (self,) + args)
self.editor=QtGui.QTextEdit(self)
self.setCentralWidget(self.editor)
self.thread1=TextThread("thread1")
self.thread2=TextThread("thread2")
self.connect(self.thread1.emitter, SIGNAL('BLA_BLA'), self.editor.append)
self.connect(self.thread2.emitter, SIGNAL('BLA_BLA'), self.editor.append)
self.thread1.start()
self.thread2.start()
def main(args):
app=QtGui.QApplication(args)
win=MainWindow()
win.show()
app.exec_()
if __name__=="__main__":
main(sys.argv)
Вам надо почитать про множественную наследовательность в питоне, не хорошо вот так микшировать родителей, т.к. вам придётся вызывать два родительских конструктора и не известно что из этого потом выйдет, это сейчас оно работает (примерно так):
# _*_ coding: utf-8 _*_
import sys, time
from threading import Thread
from PyQt4 import QtCore, QtGui
from PyQt4.QtCore import QObject, SIGNAL
class TextThread(Thread,QObject):
def __init__(self, name, *args):
QObject.__init__(self)
self.counter=0
self.name=name
super(TextThread, self).__init__(*args)
def run(self):
while self.counter < 20:
print self.name, self.counter
self.emit(SIGNAL('BLA_BLA'), self.name)
self.counter = self.counter + 1
time.sleep(0.1)
class MainWindow(QtGui.QMainWindow):
def __init__(self, *args):
apply(QtGui.QMainWindow.__init__, (self,) + args)
self.editor=QtGui.QTextEdit(self)
self.setCentralWidget(self.editor)
self.thread1=TextThread("thread1")
self.thread2=TextThread("thread2")
self.connect(self.thread1, SIGNAL('BLA_BLA'), self.editor.append)
self.connect(self.thread2, SIGNAL('BLA_BLA'), self.editor.append)
self.thread1.start()
self.thread2.start()
def main(args):
app=QtGui.QApplication(args)
win=MainWindow()
win.show()
app.exec_()
if __name__=="__main__":
main(sys.argv)
…. а какие грабли можно получить в дальнейшем?
Первый пример я считаю более корректным. Я там просто добавил в класс потока self.emitter = QObject(), это чтобы было что с чем связывать: self.connect(self.thread1.emiter, SIGNAL('BLA_BLA'), self.editor.append)