在PyQt中向web worker's上下文中添加python类
Add python class to web worker's context in PyQt
我正在用webkit编写PyQt5中的应用程序,我想通过JavaScript访问一个Python类,在Web Worker中。
我的代码,现在是这样做的:
import sys
import time
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWebKit import *
from PyQt5.QtWebKitWidgets import *
from PyQt5.QtWidgets import *
class Foo(QObject):
@pyqtSlot(result=str)
def bar(self):
return "baz"
class Window(QWidget):
def __init__(self):
super(Window, self).__init__()
self.view = QWebView(self)
self.setupInspector()
self.splitter = QSplitter(self)
self.splitter.setContentsMargins(800, 600, 0, 0)
self.splitter.setOrientation(Qt.Vertical)
self.layout = QVBoxLayout(self)
self.layout.setContentsMargins(800, 600, 0, 0)
self.layout.addWidget(self.splitter)
self.view.setLayout(self.layout)
self.foo = Foo(self)
self.view.page().mainFrame().addToJavaScriptWindowObject("foo", self.foo)
def setupInspector(self):
page = self.view.page()
page.settings().setAttribute(QWebSettings.DeveloperExtrasEnabled, True)
self.webInspector = QWebInspector(self)
self.webInspector.setPage(page)
shortcut = QShortcut(self)
shortcut.setKey(Qt.Key_F12)
shortcut.activated.connect(self.toggleInspector)
self.webInspector.setVisible(False)
def toggleInspector(self):
self.webInspector.setVisible(not self.webInspector.isVisible())
def main():
app = QApplication(sys.argv)
window = Window()
window.show()
window.view.load(QUrl(sys.argv[1]))
app.exec_()
if __name__ == "__main__":
main()
我加载一个html文件,带有file:/
URL,像这样:python3 browser.py file:/path-to-html/file.html
.
如果我运行检查器,我可以运行foo.bar()
,我得到"baz"
的回报。
我想在一个worker中运行。如果我用
创建一个javascript文件self.postMessage(foo.test());
,在检查器中,我创建了一个worker:
var worker = new Worker('file:/same-path-as-the-html/file.js');
我得到ReferenceError: Can't find variable: foo
,这对我来说,似乎意味着foo
没有被Qt添加到工人的范围。
看起来确实不可能将Qt对象添加到web-worker中,因为它们存在于自己的作用域中,而Qt对象总是添加到页面DOM中。
相关文章:
- Ember添加了对转换调用上下文(路由/控制器)的检查
- 如何在 JavaScript 中动态地向当前执行上下文添加属性
- 如何将项目添加到 Adobe Flash 上下文菜单
- Chrome扩展:正确添加具有非持久背景页的上下文菜单项
- 将图像从一个画布上下文添加到另一画布上下文
- 如何在Raphael元素上添加上下文菜单
- 在非持久性后台脚本上添加上下文菜单项
- 在backbone.js中添加事件会丢失此上下文
- 将多个项目添加到上下文菜单
- 向Mongoose回调添加上下文
- 如何添加固定垂直轴的焦点+上下文缩放时间序列
- 添加"文本颜色"在tinyMCE的上下文菜单中
- 如何向对象添加上下文方法
- 向elFinder添加自定义上下文菜单项
- 谷歌Chrome扩展,添加标签到上下文菜单
- 将搜索引擎上下文菜单项添加到文本区
- Chrome扩展>上下文菜单Api >无法添加onclick处理程序
- 向画布的上下文添加函数
- 反应错误(TypeError): Can't添加属性上下文,对象不可扩展
- 在cordova插件中为Application Insights的上下文添加属性