Window does not open new window or tab on external url link click(窗口未在外部 url 链接上打开新窗口或选项卡单击)
问题描述
我需要使用 pyQt5 打开一个 URL.该页面有几个链接可以打开一个新窗口.pyQt5 为 URL 打开一个窗口,但在单击应该打开一个新窗口的链接后不执行任何操作.PS我正在使用pyQt5.6
I need to open an URL using pyQt5. The page has several links that open a new window. pyQt5 opens a windows for the URL but does not do anything after clicking on a link that should open a new window. P.S I'm using pyQt5.6
我已经在 Linux centOs 上尝试过,但没有任何效果.
I have tried it on Linux centOs but nothing works.
from PyQt5.QtCore import QUrl
from PyQt5.QtGui import QDesktopServices
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWebEngineWidgets import QWebEngineView, QWebEnginePage
class WebEnginePage(QWebEnginePage):
def acceptNavigationRequest(self, url, _type, isMainFrame):
if _type == QWebEnginePage.NavigationTypeLinkClicked:
return True
return QWebEnginePage.acceptNavigationRequest(self, url, _type, isMainFrame)
class HtmlView(QWebEngineView):
def __init__(self, *args, **kwargs):
QWebEngineView.__init__(self, *args, **kwargs)
self.setPage(WebEnginePage(self))
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
w = HtmlView()
w.load(QUrl("https://gmail.com"));
w.show()
sys.exit(app.exec_())
我希望它会在任何网页上单击 target='_blank' 时打开一个新窗口.
I expect it to open a new window on click of target='_blank' on any webpage.
推荐答案
你必须重写 createWindow 方法并返回一个 QWebEngineView,但是为了不破坏对象,它必须是另一个窗口的子窗口或者是具有更长生命周期的容器.
You have to override the createWindow method and return a QWebEngineView, but for the object not to be distruded it must be the child of another window or be part of a container that has a longer life cycle.
from PyQt5 import QtCore, QtGui, QtWidgets, QtWebEngineWidgets
class WebEnginePage(QtWebEngineWidgets.QWebEnginePage):
def acceptNavigationRequest(self, url, _type, isMainFrame):
if _type == QtWebEngineWidgets.QWebEnginePage.NavigationTypeLinkClicked:
return True
return super(WebEnginePage, self).acceptNavigationRequest(url, _type, isMainFrame)
class HtmlView(QtWebEngineWidgets.QWebEngineView):
def __init__(self, windows, *args, **kwargs):
super(HtmlView, self).__init__(*args, **kwargs)
self.setPage(WebEnginePage(self))
self._windows = windows
self._windows.append(self)
def createWindow(self, _type):
if QtWebEngineWidgets.QWebEnginePage.WebBrowserTab:
v = HtmlView(self._windows)
v.resize(640, 480)
v.show()
return v
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
windows = []
w = HtmlView(windows)
w.load(QtCore.QUrl("https://gmail.com"));
w.show()
sys.exit(app.exec_())
这篇关于窗口未在外部 url 链接上打开新窗口或选项卡单击的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:窗口未在外部 url 链接上打开新窗口或选项卡单击
基础教程推荐
- 使用生成器和迭代器时 Python 多循环失败 2022-01-01
- pyserial - 可以从线程 a 写入串行端口,是否阻塞从线程 b 读取? 2022-01-01
- 由Python将MP3转换为MIDI(类型错误:无法加载插件:mtg-Melodia:Melodia) 2022-01-01
- 尝试制作WhatsApp机器人 2022-01-01
- 将 x 轴刻度更改为自定义字符串 2022-01-01
- 用 Python 编写 Fortran 无格式文件 2022-01-01
- 与常规 dict 相比,Python manager.dict() 非常慢 2022-01-01
- Discord.py 缺少必需的参数 2022-01-01
- numpy float:比算术运算中内置的慢 10 倍? 2022-01-01
- 在 Celery 工作人员中捕获 Heroku SIGTERM 以优雅地关 2022-01-01
