PySide2和支持addToJavaScriptWindowObj

2024-09-25 00:33:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将PySide应用程序版本1移植到PySide2,并努力寻找移植以下代码片段的解决方案:

class AppManager(QtCore.QObject):
    '''
    methods of AppObject will be available from javascript
    '''
    def __init__(self, webview):
        QtCore.QObject.__init__(self)


class WebView(QWebEngineView):
    def __init__(self, parent=None):
        QWebEngineView.__init__(self, parent)
        self.setPage(WebEnginePage(self))

    def contextMenuEvent(self, event):
        pass


class AppWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self.view = WebView(self)
        self.page = self.view.page()
        self.app_manager = AppManager(self.view)
        self.page.mainFrame().addToJavaScriptWindowObject('app_manager', self.app_manager)
        # ERROR in above line !!!

我在文档中找不到需要找到可能的修复方法的地方


Tags: selfviewappinitdefpagemanagerclass
1条回答
网友
1楼 · 发布于 2024-09-25 00:33:32

你必须使用QWebChannel,为此你必须下载qwebchannel.js(链接指向qwebchannel.js对于Qt5.12,对于不同版本,更改github分支)。在

在下面的代码中,我展示了一个示例:

.
├── index.html
├── main.py
└── qwebchannel.js

主.py

^{pr2}$

索引.html

<html>
<head>
    <script type="text/javascript" src="./qwebchannel.js"></script>
</head>
<header><title>This is title</title></header>
<body>

<p id="output"></p>

<script type="text/javascript">
    window.onload = function() {
        new QWebChannel(qt.webChannelTransport, function (channel) {
            window.app_manager = channel.objects.app_manager;
            console.log(app_manager);

            app_manager.textChanged.connect(function(message) {
                document.getElementById("output").innerHTML = "Received message: " + message;
            });

        });
    }
</script> 
</body>
</html>

相关问题 更多 >