Найти - Пользователи
Полная версия: [Решено] Перехват сигнала PySide.QWebView
Начало » Python для новичков » [Решено] Перехват сигнала PySide.QWebView
1
astrobeglec
Пишу программу которая в качестве GUI будет использовать веб-интерфейс по аналогии с браузером. Для перехода между “окнами” нужен перехват события linkClicked PySide.QtWebKit.QWebView

Скелет:
 import sys
import PySide.QtCore
import PySide.QtGui
import PySide.QtWebKit
class GUIBrowser(PySide.QtWebKit.QWebView):
    def __init__(self):
        super().__init__()
def tst():
    web.setHtml(tstHtmlB)
app = PySide.QtGui.QApplication(sys.argv)
web = GUIBrowser()
web.setHtml(tstHtml)
web.linkClicked = tst()
web.show()
sys.exit(app.exec_())

Испробована куча вариантов, в т.ч.

 self.linkClicked.connect(tst)
linkClicked = PySide.QtCore.Signal(str, str, str, str)

Но при клике на ссылку идет не вызов функции прописанной в слоте, а стандартное действие - переход по ссылке.

Решение спасибо vic57

 #!/usr/bin/env python
#coding:utf-8
from PySide.QtGui import QApplication
from PySide.QtWebKit import QWebView, QWebPage
class View(QWebView):
    def __init__(self):
        QWebView.__init__(self)
        self.page().setLinkDelegationPolicy(QWebPage.DelegateAllLinks)
        self.linkClicked.connect(self.on_link)
    def on_link(self,url):
        print('link:',url.path())
        
if __name__=="__main__":
    app = QApplication([])
    view = View()
    html = "<html><body><a href=\"about:blank\">Click Me</a></body></html>"
    view.setHtml(html)
    view.move(0,0)
    view.resize(400,300)
    view.show()
    app.exec_()
vic57
унаследуйся от WebView и обработчик перепиши
 #
#!/usr/bin/env python
#coding:utf-8
from PyQt4.Qt import QApplication,QWebView
class View(QWebView):
    def __init__(self):
        QWebView.__init__(self)
        self.page().setLinkDelegationPolicy(2)
        self.linkClicked.connect(self.on_link)
    def on_link(self,url):
        print 'link:',url.path()
        
if __name__=="__main__":
    app = QApplication([])
    view = View()
    html = "<html><body><a href=\"about:blank\">Click Me</a></body></html>"
    view.setHtml(html)
    view.move(0,0)
    view.resize(400,300)
    view.show()
    app.exec_()
astrobeglec
vic57
унаследуйся от WebView и обработчик перепиши
Спасибо большое, пинок понял. В Python3 + PySide получается так:

 #!/usr/bin/env python
#coding:utf-8
from PySide.QtGui import QApplication
from PySide.QtWebKit import QWebView, QWebPage
class View(QWebView):
    def __init__(self):
        QWebView.__init__(self)
        self.page().setLinkDelegationPolicy(QWebPage.DelegateAllLinks)
        self.linkClicked.connect(self.on_link)
    def on_link(self,url):
        print('link:',url.path())
        
if __name__=="__main__":
    app = QApplication([])
    view = View()
    html = "<html><body><a href=\"about:blank\">Click Me</a></body></html>"
    view.setHtml(html)
    view.move(0,0)
    view.resize(400,300)
    view.show()
    app.exec_()
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB