問題描述
我使用 pyqt5 和 PyQtWebEngine 制作了一個 Web 瀏覽器.它工作正常,但是當我單擊帶有 target=_blank"的超鏈接時那么它不起作用,但我將如何解決它.您可以通過點擊此鏈接查看其源代碼 https://github.com/SaptakBhoumik/WebPlus.請檢查我的代碼并告訴我該怎么做
I have made a web browser using pyqt5 and PyQtWebEngine.It works fine but when I click on a hyperlink with target="_blank" then it does not work but how will I fix it. You can view its source code by clicking on this link https://github.com/SaptakBhoumik/WebPlus . Please review my code and tell me what to do
推薦答案
如 文檔:
_blank:通常是一個新標簽頁,但用戶可以配置瀏覽器打開一個新窗口.
_blank: usually a new tab, but users can configure browsers to open a new window instead.
也就是說,目標不是重新加載頁面,而是創建一個新選項卡,然后為了獲得該請求,您必須重寫 QWebEngineView(或 QWebEnginePage)的 createWindow 方法:
That is, the objective is not to reload the page but to create a new tab, and then to obtain that request you must override the createWindow method of QWebEngineView (or QWebEnginePage):
from functools import cached_property
import sys
from PyQt5 import QtCore, QtGui, QtWidgets, QtWebEngineWidgets
class WebView(QtWebEngineWidgets.QWebEngineView):
def createWindow(self, type_):
if not isinstance(self.window(), Browser):
return
if type_ == QtWebEngineWidgets.QWebEnginePage.WebBrowserTab:
return self.window().tab_widget.create_tab()
class TabWidget(QtWidgets.QTabWidget):
def create_tab(self):
view = WebView()
index = self.addTab(view, "(Untitled)")
self.setTabIcon(index, view.icon())
view.titleChanged.connect(
lambda title, view=view: self.update_title(view, title)
)
view.iconChanged.connect(lambda icon, view=view: self.update_icon(view, icon))
self.setCurrentWidget(view)
return view
def update_title(self, view, title):
index = self.indexOf(view)
self.setTabText(index, title)
def update_icon(self, view, icon):
index = self.indexOf(view)
self.setTabIcon(index, icon)
class Browser(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.setCentralWidget(self.tab_widget)
view = self.tab_widget.create_tab()
view.load(
QtCore.QUrl(
"https://www.w3schools.com/tags/tryit.asp?filename=tryhtml_a_target"
)
)
@cached_property
def tab_widget(self):
return TabWidget()
def main():
app = QtWidgets.QApplication(sys.argv)
w = Browser()
w.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
注意:建議您查看官方示例:WebEngine Widgets 簡單瀏覽器示例,以及在 PySide2 很容易翻譯成 PyQt5 實現了這個功能和更多功能.
Note: I recommend that you review the official example: WebEngine Widgets Simple Browser Example, in addition to its implementation in PySide2 which is easily translatable to PyQt5 where this feature and many more are implemented.
這篇關于如何使用 target=“_blank"打開超鏈接在 PyQtWebEngine 中?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!