Je ouvre une page dans qtwebview (à Pyqt si cela compte) et je souhaite ouvrir tous les liens dans le navigateur par défaut du système. C'est à dire. Un clic sur un lien ne doit pas changer le site dans le QTwebView, mais il doit l'ouvrir avec le navigateur par défaut. Je veux rendre l'impossible à l'utilisateur de changer le site dans le Qtwebview. P>
Comment puis-je faire ça? P>
merci, Albert P>
3 Réponses :
Cela fait:
import sys, webbrowser from PyQt4.QtCore import * from PyQt4.QtGui import * from PyQt4.QtWebKit import * app = QApplication(sys.argv) web = QWebView() web.load(QUrl("http://www.az2000.de/projects/javascript-project/")) web.page().setLinkDelegationPolicy(QWebPage.DelegateAllLinks) def linkClicked(url): webbrowser.open(str(url.toString())) web.connect(web, SIGNAL("linkClicked (const QUrl&)"), linkClicked) web.show() sys.exit(app.exec_())
Merci. Nous pouvons lier le gestionnaire en utilisant de cette manière aussi: web.linkclicked.Connect (self.linkclicked)
Exemple mis à jour pour PYQT5 (la magie consiste à ré-implémenter la méthode "AcceptnavigateDeQuest"):
Lorsque vous cliquez sur un lien qui possède l'attribut La clé est de ré- Implémentez cette méthode pour, au lieu d'ouvrir un nouvel onglet, ouvrez une nouvelle fenêtre de navigateur. P> cible = "_ vide" attribut code>, qt appelle la méthode Creewindow dans qwebenginePage pour créer une nouvelle onglet / nouvelle fenêtre.
class WebEnginePage(QtWebEngineWidgets.QWebEnginePage):
def createWindow(self, _type):
page = WebEnginePage(self)
page.urlChanged.connect(self.open_browser)
return page
def open_browser(self, url):
page = self.sender()
QDesktopServices.openUrl(url)
page.deleteLater()
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.url = QUrl("https://stackoverflow.com/")
self.webView = QWebEngineView()
self.page = WebEnginePage(self.webView)
self.webView.setPage(self.page)
self.webView.load(self.url)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
web = MainWindow()
web.show()
sys.exit(app.exec_())