PyQt5 обрабатывает параллельные загрузки страниц QWebEngineView? - PullRequest
0 голосов
/ 03 января 2019

Я попробовал несколько предложений в сети, но пока не смог. Не уверен, что это возможно, но объясню, чего я пытаюсь достичь.

У меня есть MainWindow, который имеет следующий метод. И кнопка заранее инициализирует три экземпляра виджетов браузера.

def handleSearches(self):
        # do the search
        browseThreads = []
        for idx, browser in enumerate(self.browsers):
            browseThreads.append(BrowseThread(browser, self.data["options"][idx]))

        for browseThread in browseThreads:
            browseThread.start()

Где браузер, как определено QWidget вроде следующего;

class Browser(QtWidgets.QWidget):
    def __init__(self, title):
        super().__init__()

        self.gridLayout = QtWidgets.QGridLayout(self)
        self.gridLayout.setObjectName("gridLayout")

        self.webView = QWebEngineView()
        self.webView.setUrl(QtCore.QUrl("https://www.google.com.tr"))

        # some codes

    def search(self, question, candidate, mode):
            self.candidate = candidate
            url = "https://www.google.com.tr/search?q={}".format(urllib.parse.quote_plus(candidate))

        self.webView.setUrl(QtCore.QUrl(url))


    def find_text(self, text):
        soup = BS(self.src,'lxml')

        # some source code alteration here

        self.webView.page().setHtml(str(soup), self.webView.page().requestedUrl())

    def on_page_load(self):
        self.webView.page().toHtml(self.on_source_fetched)

    def on_source_fetched(self, data):
            self.src = data
            self.find_text(self.candidate)

Класс My Thread определен следующим образом:

class BrowseThread (QThread):
    def __init__(self, browser, searchString):
        QThread.__init__(self)
        self.searchString = searchString
        self.browser = browser

    def run(self):
        self.search_text(self.searchString)

    def search_text(self, text):
        self.browser.search(text, '', 1)

Чего я пытаюсь добиться, так это параллельно искать разные строки в 3 случаях, ничего не блокируя. Поток не работал, я думаю, потому что графический интерфейс виджета браузера нуждается в обновлении. Как это сделать?

Спасибо.

...