我希望程式可以同时去多个网站抓线上字典,
然后抓完的thread可以signal我的main thread去更新GUI
程式大略如下:
class Searcher(QObject):
    update=pyqtSignal(str, str)
    def __init__(self, dictionary, word):
        super(Searcher, self).__init__()
        self.dictionary=dictionary
        self.word=word
    def run(self):
        self.update.emit(self.dictionary, self.word)
class MyMainWindow(QMainWindow, Ui_MainWindow, QObject):
    #发送搜寻的讯号
    signal=pyqtSignal()
    def __init__(self, parent=None):
        super(MyMainWindow, self).__init__()
        self.setupUi(self)
        #两本字典
        self.dictList=['Yahoo dictionary', 'Webster dictionary']
        #所以产生两个Qthread
        self.searchThreads=[]
        for dictionary in self.dictList:
            self.searchThreads.append(QThread())
    def click(self):
        word=self.lineEdit.text()
        #产生两个Searcher object
        self.searchers=[]
        for dictionary in self.dictList:
            self.searchers.append(Searcher(dictionary, word))
        for index , searcher in enumerate(self.searchers):
            #让每个searcher可以通知gui更新
            searcher.update.connect(self.renew)
            #移到thread里执行
            searcher.moveToThread(self.searchThreads[index])
            self.searchThreads[index].start()
            #让main thread可以发signal通知searcher执行
            self.signal.connect(searcher.run)
        #通知thread里面的searcher开始执行
        self.signal.emit()
////////////
当我搜寻第一个单字的时候完全没有问题
但是当我搜寻第二个单字的时候
会出现两个下面这种错误
self.update.emit(self.dictionary, self.word)
AttributeError: 'NoneType' object has no attribute 'update'
后来try except了一下
发现会有两个空的Searcher(null object)执行到run
之后再有两个正常的Searcher执行run
除了第一次正常以外,之后每次都会这样
不知道问题出在哪里?
题外话,我本来最一开始写的是 Searcher(QThread):
可是有文章说You're doing it wrong
所以才改成继承QObject