Python 为什么会有";点击链接(const-QUrl)“;信号未捕获鼠标左键的QUrl?

Python 为什么会有";点击链接(const-QUrl)“;信号未捕获鼠标左键的QUrl?,python,pyqt,Python,Pyqt,首先,我想明确指出,这种奇怪的行为并不适用于所有网站 以下是我的代码: 如您所见,每个选项卡上都有一个QWebView,它与update_link方法连接,即: def update_link(self, url): self.url_field.setText(url.toString()) self.current_links[self.tab_stack.currentIndex()] = url.toString() self.tabs[self.tab_stac

首先,我想明确指出,这种奇怪的行为并不适用于所有网站

以下是我的代码:

如您所见,每个选项卡上都有一个QWebView,它与update_link方法连接,即:

def update_link(self, url):
    self.url_field.setText(url.toString())
    self.current_links[self.tab_stack.currentIndex()] = url.toString()
    self.tabs[self.tab_stack.currentIndex()][2].load(url)
因此,每次单击链接时,URL字段都会用传递给该方法的QUrl更新。它在维基百科这样的网站上运行得很好,但在youtube上运行得不好(例如),如果涉及Javascript,则可能不会发出信号。这是“好的”,但有一个问题:

当我用鼠标中键点击链接时,会发出信号(这没有意义!)

因此,如果我用第一个鼠标按钮访问youtube上的视频,URL字段不会更新,因为没有QUrl传递给update_link方法,但是如果我用鼠标中键单击,URL字段会正常更新。这非常令人费解,因为我无法“覆盖”信号并改变这种行为

有人可以运行我的浏览器并检查行为吗?(因为复制它需要大量的工作)

编辑:


在youtube视频上用鼠标左键单击时,也不会传递QUrl。等待loadFinished也没用。

我不能直接回答你的问题,但基于这一点和你之前的问题,我怀疑你让事情变得比你需要的更困难
QWebView
自动处理视图中URL的导航(包括使用JavaScript),因此您无需直接处理鼠标事件或链接

在视图中单击链接时,下一页将自动打开,
QWebView
将发出
urlChanged
信号。如果要保持URL栏同步,可以连接到此信号并简单地更新URL栏文本,例如:

webview.urlChanged.connect(<custom slot function>)

很有意思,我不知道这件事。我已经用它进行了测试,但在Youtube上,当我访问视频时,URL字段永远保留在“www.Youtube.com”中。这是一个问题,因为我正在尝试实现书签(我需要每个视频的链接与dict中的标题相关联)。在这里面的某个地方,PyQt4有一个问题。@EricsonWillians这很奇怪,当我在这里做的时候,它工作得很好。我已经发布了一个演示选项卡式浏览器的源代码,我放在这里进行比较,您使用PyQt5,我使用PyQt4,所以可能这就是问题所在。我会更新我的并检查它是否有效。@EricsonWillians我刚刚用PyQt4(调整导入)测试了它,我可以在youtube.com上复制这个问题-非常奇怪!我认为这是一个错误。@EricsonWillians如果你喜欢黑客,你可以使用
.loadFinished
并在窗口中执行JavaScript。
webview.urlChanged.connect(<custom slot function>)
def url_changed(self, q):
   <your-urlbar-obj>.setText(q.toString())