AttributeError: ‘Connection‘ object has no attribute ‘javaScriptWindowObjectCleared‘

在PyQt5和PyQt6中,QWebChannel类的connection()方法返回的对象类型已经从QObject改为了QWebChannelAbstractTransport。因此,在调用javaScriptWindowObjectCleared信号时,需要使用QWebChannelAbstractTransport类的disconnect()方法来断开信号的连接。

以下是一个示例代码,演示如何在PyQt6中使用QWebChanneljavaScriptWindowObjectCleared信号:

from PyQt6.QtCore import QObject, pyqtSignal, pyqtSlot, QUrl
from PyQt6.QtWebEngineWidgets import QWebEngineView
from PyQt6.QtWebChannel import QWebChannel, QWebChannelAbstractTransport
from PyQt6.QtWidgets import QApplication

class MyObject(QObject):
    def __init__(self):
        super().__init__()

    @pyqtSlot(str)
    def showMessage(self, message):
        print(message)

app = QApplication([])
view = QWebEngineView()
view.load(QUrl("https://www.example.com"))

channel = QWebChannel()
my_object = MyObject()
channel.registerObject("my_object", my_object)
view.page().setWebChannel(channel)

class Connection(QWebChannelAbstractTransport):
    def sendMessage(self, message):
        self.messageReceived.emit(message)

    messageReceived = pyqtSignal(str)

connection = Connection()
channel.connectTo(connection, QUrl("qtwebchannel:"))

def on_java_script_window_object_cleared():
    connection.messageReceived.connect(my_object.showMessage)
    view.page().runJavaScript("myObject.showMessage('Hello from JavaScript!')")

view.page().javaScriptWindowObjectCleared.connect(on_java_script_window_object_cleared)
view.show()
app.exec()

在这个示例中,我们创建了一个MyObject类,用于在JavaScript和Python之间传递数据。然后我们创建了一个QWebChannel对象,并将MyObject对象注册到该通道中。接下来,我们将QWebChannel对象设置为WebView的页面,并创建了一个Connection对象来连接JavaScript和Python之间的通道。

on_java_script_window_object_cleared()函数中,我们使用connect()方法将messageReceived信号连接到MyObject对象的showMessage()槽函数。然后我们使用runJavaScript()方法执行了一个简单的JavaScript代码,该代码调用了MyObject对象的showMessage()方法,并传递了一个字符串参数。

需要注意的是,在PyQt6中,QWebChannelAbstractTransport类的sendMessage()方法已经改为了纯虚函数,因此你需要在子类中实现该方法。在这个示例中,我们使用messageReceived信号来模拟接收JavaScript发送的消息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值