QtWebEngineWidgets открытие сайта на новой вкладке при нажатии Ctrl+ЛКМ или СКМ по ссылке
При нажатии на ссылку при помощи Ctrl+ЛКМ или СКМ сайт должен открываться в новой вкладке
import sys
from PySide6.QtWebEngineWidgets import QWebEngineView
from PySide6.QtWidgets import (QApplication, QMainWindow, QTabWidget)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle('Web')
self.tab_widget = QTabWidget(self)
self.setCentralWidget(self.tab_widget)
web_view = QWebEngineView()
web_view.setUrl('https://google.com')
self.tab_widget.addTab(web_view, 'tab title')
def add_tab(self, url):
web_view = QWebEngineView()
web_view.setUrl(url)
self.tab_widget.addTab(web_view, 'tab title')
if __name__ == '__main__':
app = QApplication(sys.argv)
mainWin = MainWindow()
availableGeometry = mainWin.screen().availableGeometry()
mainWin.resize(availableGeometry.width() * 2 / 3, availableGeometry.height() * 2 / 3)
mainWin.show()
sys.exit(app.exec())
Ответы (1 шт):
Автор решения: OneEyedDancer
→ Ссылка
Догадался, что нужно использовать WebBrowserBackgroundTab
import sys
from PySide6.QtWebEngineCore import QWebEnginePage
from PySide6.QtWebEngineWidgets import QWebEngineView
from PySide6.QtWidgets import (QApplication, QMainWindow, QTabWidget)
class MyWebView(QWebEngineView):
def createWindow(self, type_):
if type_ == QWebEnginePage.WebBrowserBackgroundTab:
# Вызывается при Ctrl+ЛКМ / СКМ
return self.window().add_tab(self.url())
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle('Web')
self.tab_widget = QTabWidget(self)
self.setCentralWidget(self.tab_widget)
web_view = MyWebView()
web_view.setUrl('https://google.com')
self.tab_widget.addTab(web_view, 'tab title')
def add_tab(self, url):
web_view = MyWebView()
web_view.setUrl(url)
self.tab_widget.addTab(web_view, 'tab title')
return web_view # Возвращаем QWebEngineView для запроса
if __name__ == '__main__':
app = QApplication(sys.argv)
mainWin = MainWindow()
availableGeometry = mainWin.screen().availableGeometry()
mainWin.resize(availableGeometry.width() * 2 / 3, availableGeometry.height() * 2 / 3)
mainWin.show()
sys.exit(app.exec())
