[问题] PyQt5 使用QObject的时候出现null object

楼主: henry666666 (雨四光)   2013-12-18 16:27:39
我希望程式可以同时去多个网站抓线上字典,
然后抓完的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
作者: uranusjr (←這人是超級笨蛋)   2013-02-19 14:53:00
在清空 self.searchers 之前先把旧的 disconnect这程式还有很多其他可以吐槽的地方, 不过我懒得管了...

Links booklink

Contact Us: admin [ a t ] ucptt.com