gpt4 book ai didi

python - 子类 QWebView 对超链接点击没有反应

转载 作者:太空宇宙 更新时间:2023-11-03 15:25:25 24 4
gpt4 key购买 nike

这是在 Python/PySide 中。

我正在尝试通过重载 PySide.QtWebKit.QWebView 小部件来创建我自己的 Parental WebBrowser。然后,每当有人点击小部件上的链接时,我都会检查我们是否会访问无效网站,如果不是,我们会继续,如果是,那么我会重定向到一个通用页面。

所以我已经对 PySide.QtWebKit.QWebView 进行了子类化,但是我没有收到有关何时单击链接的通知。我已经覆盖了 linkClicked 函数,但单击链接时该函数从未运行?

我做错了什么?为什么我的函数无法运行/对超链接单击“事件”使用react?我是否需要覆盖网页对象而不是此类才能对链接点击使用react?

import PySide.QtWebKit
import sys
from PyQt4 import QtGui


class BrowserWindow( PySide.QtWebKit.QWebView ):
# Class Variables:

def __init__( self, _parent ):
""" Constructor: """

super(BrowserWindow, self).__init__()
PySide.QtWebKit.QWebView(None)


def linkClicked(self, arg__1):
""" Post: """

#print("LINK CLICKED")
#text, ok = QtGui.QInputDialog.getText(self, 'Input Dialog',
# 'Enter your name:')

self.load("http://yahoo.com")


def main():

app = QtGui.QApplication(sys.argv)

view = BrowserWindow(None) #PySide.QtWebKit.QWebView(None)
view.load("http://google.com")
view.show()

sys.exit(app.exec_())


if __name__ == '__main__':
main()

最佳答案

您发布的代码有几个问题。首先,您同时导入了 PySide 和 PyQt4,这不是一个好主意。其次,QWebView.linkClicked 是一个信号,不是 protected 方法,因此您不能覆盖它。第三,当您应该传递 QtCore.QUrl 时,您将字符串传递给 QWebView.load

但是,除了这些问题之外,您还需要设置 linkDelegationPolicy在网页上以覆盖其链接处理。

这是您的代码的编辑版本,应该可以解决所有问题:

from PySide import QtCore, QtGui, QtWebKit

class BrowserWindow(QtWebKit.QWebView):
def __init__(self, parent=None):
super(BrowserWindow, self).__init__()
self.linkClicked.connect(self.handleLinkClicked)

def handleLinkClicked(self, url):
print(url.toString())

if __name__ == '__main__':

import sys
app = QtGui.QApplication(sys.argv)
view = BrowserWindow()
view.load(QtCore.QUrl("http://google.com"))
view.page().setLinkDelegationPolicy(
QtWebKit.QWebPage.DelegateAllLinks)
view.show()
sys.exit(app.exec_())

关于python - 子类 QWebView 对超链接点击没有反应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7856504/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com