def getRemoteWordList(self, selected_groups: [str]): """根据选中到分组获取分组下到全部单词,并添加到 newWordListWidget""" group_map = dict(self.selectedDict.groups) self.localWords = getWordsByDeck(self.deckComboBox.currentText()) # 启动单词获取线程 self.pullWorker = RemoteWordFetchingWorker(self.selectedDict, [(group_name, group_map[group_name],) for group_name in selected_groups]) self.pullWorker.moveToThread(self.workerThread) self.pullWorker.start.connect(self.pullWorker.run) self.pullWorker.tick.connect(lambda: self.progressBar.setValue(self.progressBar.value() + 1)) self.pullWorker.setProgress.connect(self.progressBar.setMaximum) self.pullWorker.doneThisGroup.connect(self.insertWordToListWidget) self.pullWorker.done.connect(self.on_allPullWork_done) self.pullWorker.start.emit()
def on_allPullWork_done(self): """全部分组获取完毕事件""" localWordList = set(getWordsByDeck(self.deckComboBox.currentText())) remoteWordList = set([ self.newWordListWidget.item(row).text() for row in range(self.newWordListWidget.count()) ]) newWords = remoteWordList - localWordList # 新单词 needToDeleteWords = localWordList - remoteWordList # 需要删除的单词 logger.info(f'本地: {localWordList}') logger.info(f'远程: {remoteWordList}') logger.info(f'待查: {newWords}') logger.info(f'待删: {needToDeleteWords}') waitIcon = QIcon(':/icons/wait.png') delIcon = QIcon(':/icons/delete.png') self.newWordListWidget.clear() self.needDeleteWordListWidget.clear() for word in needToDeleteWords: item = QListWidgetItem(word) item.setCheckState(Qt.Checked) item.setIcon(delIcon) self.needDeleteWordListWidget.addItem(item) for word in newWords: item = QListWidgetItem(word) item.setIcon(waitIcon) self.newWordListWidget.addItem(item) self.newWordListWidget.clearSelection() self.dictionaryComboBox.setEnabled(True) self.apiComboBox.setEnabled(True) self.deckComboBox.setEnabled(True) self.pullRemoteWordsBtn.setEnabled(True) self.queryBtn.setEnabled(self.newWordListWidget.count() > 0) self.syncBtn.setEnabled(self.newWordListWidget.count() == 0 and self.needDeleteWordListWidget.count() > 0) if self.needDeleteWordListWidget.count( ) == self.newWordListWidget.count() == 0: logger.info('无需同步') tooltip('无需同步') self.mainTab.setEnabled(True)