Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 8, 2016 10:53:02

astrobeglec
Зарегистрирован: 2015-09-04
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

[Решено] Перехват сигнала PySide.QWebView

Пишу программу которая в качестве 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_()

Отредактировано astrobeglec (Дек. 14, 2016 08:40:00)

Офлайн

#2 Дек. 8, 2016 13:07:02

vic57
Зарегистрирован: 2015-07-07
Сообщения: 893
Репутация: +  126  -
Профиль   Отправить e-mail  

[Решено] Перехват сигнала PySide.QWebView

унаследуйся от 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_()

Отредактировано vic57 (Дек. 8, 2016 21:55:30)

Офлайн

#3 Дек. 14, 2016 08:36:52

astrobeglec
Зарегистрирован: 2015-09-04
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

[Решено] Перехват сигнала PySide.QWebView

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

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version