您好,登錄后才能下訂單哦!
定義了work類:
class AddWork(QObject):
addSignal = pyqtSignal(str)
def __init__(self, parentItem, type, url=None):
super(AddWork, self).__init__()
# super().__init__()
self.type = type
self.parentItem = parentItem
self.scy = scrpy()
self.url = url
def work(self):
print('1')
if self.type == 'top':
data = self.scy.getIndex()
self.addSignal.emit('正在讀取目錄數據')
elif self.url is not None:
if self.type == 'second':
data = self.scy.getChildPage(self.url)
self.addSignal.emit('正在讀取次級目錄數據')
elif self.type == 'three':
data = self.scy.getMagzineList(self.url)
self.addSignal.emit('正在讀取文章目錄數據')
else:
self.addSignal.emit('傳入數據不正確,請修改后重試')
return
for item in data:
self.addSignal.emit('正在在顯示目錄插入數據')
node = QTreeWidgetItem(self.parentItem)
node.setText(0, item[0])
node.setText(1, item[1])
self.addSignal.emit('顯示完成')
在主程序中使用:
def ButtonReadData(self):
if self.rootNode.childCount() != 0:
return
worker = AddWork(self.rootNode, 'top')
worker.addSignal.connect(self.ShowLog)
thread = QThread()
print('ready start button thread')
thread.start()
print('end start button thread')
worker.moveToThread(thread)
thread.started.connect(worker.work)
但是在點擊按鈕之后,沒有反應,后經過debug,發現能運行到線程中,但是該運行線程的run函數的時候就沒動靜了。
我懷疑是在按鈕函數運行完后將線程變量被銷毀了?后經過實驗,添加下面兩行代碼即可正常運行,即將work和線程添加到一個全局的列表中保存:
self.threadList.append(thread)
self.workers.append(worker)
總的按鈕事件代碼為:
def ButtonReadData(self):
if self.rootNode.childCount() != 0:
return
worker = AddWork(self.rootNode, 'top')
worker.addSignal.connect(self.ShowLog)
thread = QThread()
print('ready start button thread')
thread.start()
print('end start button thread')
worker.moveToThread(thread)
thread.started.connect(worker.work)
self.threadList.append(thread)
self.workers.append(worker)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。