分级的QWebView不会对超链接点击作出反应

2024-10-16 17:17:57 发布

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

这是用Python/PySide编写的。在

我试图通过重载PySide.QtWebKit.QWebView小装置。然后,每当有人点击widget上的链接时,我会检查是否要转到一个无效的网站,如果没有,我们继续,如果是,那么我会重定向到一个通用页面。在

所以我把PySide.QtWebKit.QWebView,但我没有收到链接被单击时的通知。我已经重写了linkClicked函数,但是当一个链接被点击时,这个函数从来没有运行过?

我做错什么了?为什么我的功能不能运行/响应超链接点击“事件”?我是否需要重写webpage对象而不是该类来响应链接单击?在

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()

Tags: importselfnoneview链接maindefsys
1条回答
网友
1楼 · 发布于 2024-10-16 17:17:57

你发布的代码有几个问题。首先,您同时导入PySide和PyQt4,这不是一个好主意。其次,QWebView.linkClicked是一个信号,而不是一个受保护的方法,因此不能重写它。第三,您正在向QWebView.load传递一个字符串,而您应该传递一个QtCore.QUrl。在

但是,除了这些问题之外,您还需要在web页面上设置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_())

相关问题 更多 >