Используйте Python для запуска JavaScript в фоновом режиме, используя поток - PullRequest
0 голосов
/ 28 ноября 2018

В настоящее время я работаю над созданием простого текстового редактора, использующего PYQT5 в качестве основного графического интерфейса и использующего Node.js в качестве текстовой области, и занимаюсь фильтрацией некоторых слов.Вот мой код для PYQT-части:

import threading

from PyQt5 import QtCore, QtGui, QtWidgets
from Naked.toolshed.shell import execute_js, muterun_js

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1090, 780)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        self.webView = QtWebEngineWidgets.QWebEngineView(self.centralwidget)
        self.webView.setUrl(QtCore.QUrl("http://127.0.0.1:3000/"))
        self.webView.setObjectName("webView")
        self.gridLayout.addWidget(self.webView, 0, 0, 1, 1)
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))

from PyQt5 import QtWebEngineWidgets


def loadJS():
    #try to use threading here to run it in background but still no effects

    js = threading.Thread(target=execute_js("../Editor/Engine/index.js"))
    js.daemon=True
    js.start()



def loadGUI():
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())



if __name__ == "__main__":
    import sys
    loadJS()
    loadGUI()

Мой ожидаемый результат - использование WebView в PYQT5 для загрузки моего локального хоста, чтобы я мог получить что-то вроде этого:

Ожидаемый результат

Мой скрипт Node.js прекрасно работает и выполняет всю свою работу, но нет способа запустить мой основной графический интерфейс.Насколько я понимаю, при запуске система ждет, пока loadJS () завершит свою работу, а затем вызовет loadGUI ().Поэтому я попытался использовать Threading, чтобы поместить loadJS () в фоновый режим и поддерживать его, пока loadGUI () находится впереди.Тем не менее, похоже, что никаких последствий.Я не уверен, что использую Threading неправильно или неправильно понимаю его назначение.Любая помощь приветствуется.

1 Ответ

0 голосов
/ 28 ноября 2018

В исходном коде вы вызываете непосредственно в функции в основном потоке, вместо этого вы должны передать в качестве цели имя функции и в аргументах аргументы в виде кортежа.

js = threading.Thread(target=execute_js, args=("../Editor/Engine/index.js",))
js.daemon=True
js.start()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...