Python 子类QWebView不';不要对超链接点击做出反应
这是Python/PySide版本 我试图通过重载PySide.QtWebKit.QWebView小部件来创建自己的家长网络浏览器。然后,每当有人点击小部件上的链接时,我都会检查我们是否要访问一个无效的网站,如果不是,我们继续,如果是,我会重定向到一个通用页面 因此我对PySide.QtWebKit.QWebView进行了子类化,但我没有收到单击链接的通知。我已覆盖linkClicked函数,但单击链接时该函数从未运行? 我做错了什么?为什么我的功能不能运行/对超链接作出反应单击“事件”?我是否需要重写webpage对象&而不是此类来响应链接单击Python 子类QWebView不';不要对超链接点击做出反应,python,pyqt,pyqt4,pyside,Python,Pyqt,Pyqt4,Pyside,这是Python/PySide版本 我试图通过重载PySide.QtWebKit.QWebView小部件来创建自己的家长网络浏览器。然后,每当有人点击小部件上的链接时,我都会检查我们是否要访问一个无效的网站,如果不是,我们继续,如果是,我会重定向到一个通用页面 因此我对PySide.QtWebKit.QWebView进行了子类化,但我没有收到单击链接的通知。我已覆盖linkClicked函数,但单击链接时该函数从未运行? 我做错了什么?为什么我的功能不能运行/对超链接作出反应单击“事件”?我是否
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
是一个信号,不是一个受保护的方法,所以不能重写它。第三,当您应该传递QtCore.qrl
时,您正在将字符串传递给QWebView.load
但是,除了这些问题之外,您还需要在网页上设置以覆盖其链接处理
以下是您的代码的编辑版本,可以解决所有问题:
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_())