PyQt6中不包含QWebEngine
需要单独安装PyQtWebEngine
下面的代码是在CodeGeex插件下辅助写的,这个插件太爽了,基本不用写什么代码
# 功能
简易浏览器
- 打开网页
- 页面回退,前进
- 创建tab页
# 运行效果
代码:
from PyQt6.QtWebEngineWidgets import QWebEngineView
from PyQt6.QtCore import *
from PyQt6.QtWidgets import *
from PyQt6.QtGui import *
import sys
from about_dialog import *
class WebChrome(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
self.initAction()
def initUI(self):
self.setWindowTitle('WebChrome')
self.setGeometry(100, 100, 800, 600)
self.tabs = QTabWidget()
self.tabs.setDocumentMode(True)
self.tabs.setTabsClosable(True)
self.add_new_tab()
self.setCentralWidget(self.tabs)
self.menuBar().setNativeMenuBar(False)
self.help_menu = self.menuBar().addMenu('Help')
self.navtb = QToolBar('Navigation')
self.navtb.setIconSize(QSize(16, 16))
self.addToolBar(self.navtb)
self.urlbar = QLineEdit()
def initAction(self):
self.tabs.tabBarDoubleClicked.connect(self.tab_open_doubleclick)
self.tabs.currentChanged.connect(self.current_tab_changed)
self.tabs.tabCloseRequested.connect(self.close_current_tab)
self.urlbar.returnPressed.connect(self.navigate_to_url)
about_action = QAction('About', self)
about_action.setStatusTip('find out more about this application')
about_action.triggered.connect(self.about)
self.help_menu.addAction(about_action)
back_btn = QAction(QIcon('imgs/arrow_left.png'), 'Back', self)
back_btn.setStatusTip('back to preview page')
back_btn.triggered.connect(lambda: self.tabs.currentWidget().back())
self.navtb.addAction(back_btn)
next_btn = QAction( QIcon('imgs/arrow_right.png'), "Forward", self)
next_btn.setStatusTip("Forward to next page")
next_btn.triggered.connect(lambda: self.tabs.currentWidget().forward())
self.navtb.addAction(next_btn)
reload_btn = QAction( QIcon('imgs/reload.png'), "Reload", self)
reload_btn.setStatusTip("Reload page")
reload_btn.triggered.connect(lambda: self.tabs.currentWidget().reload())
self.navtb.addAction(reload_btn)
self.navtb.addWidget(self.urlbar)
def about(self):
dlg = AboutDialog()
dlg.exec()
def navigate_to_url(self):
q = QUrl(self.urlbar.text())
if q.scheme() == '':
q.setScheme('http')
self.tabs.currentWidget().setUrl(q)
def close_current_tab(self, index):
if self.tabs.count() < 2:
return
self.tabs.removeTab(index)
def current_tab_changed(self, index):
if index < 0:
return
qurl = self.tabs.currentWidget().url()
self.update_title(self.tabs.currentWidget())
self.update_urlbar(qurl, self.tabs.currentWidget())
def update_title(self, browser):
if browser != self.tabs.currentWidget():
return
title = self.tabs.currentWidget().title()
self.setWindowTitle(title)
def update_urlbar(self, q, browser):
if browser != self.tabs.currentWidget():
return
if q.scheme() == 'https':
self.tabs.setTabIcon(self.tabs.currentIndex(), QIcon('icons/lock.png'))
else:
self.tabs.setTabIcon(self.tabs.currentIndex(), QIcon('icons/globe.png'))
self.urlbar.setText(q.toString())
self.urlbar.setCursorPosition(0)
def tab_open_doubleclick(self, index):
if index == -1:
self.add_new_tab()
def add_new_tab(self, qurl=None, label='Blank'):
if qurl is None:
qurl = QUrl('http://www.google.com')
browser = QWebEngineView()
browser.setUrl(qurl)
i = self.tabs.addTab(browser, label)
self.tabs.setCurrentIndex(i)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = WebChrome()
window.show()
sys.exit(app.exec())
from PyQt6.QtCore import Qt
from PyQt6.QtWidgets import *
from PyQt6.QtCore import *
from PyQt6.QtGui import *
from PyQt6.QtWidgets import QWidget
class AboutDialog(QDialog):
def __init__(self) -> None:
super().__init__()
QBtn = QDialogButtonBox.StandardButton.Ok # No cancel
self.buttonBox = QDialogButtonBox(QBtn)
self.buttonBox.accepted.connect(self.accept)
self.buttonBox.rejected.connect(self.reject)
layout = QVBoxLayout()
title = QLabel("<h2>About WebEngineView</h2>")
font = title.font()
font.setPointSize(20)
title.setFont(font)
layout.addWidget(title)
logo = QLabel()
logo.setPixmap(QPixmap("/imgs/json.png"))
layout.addWidget(logo)
layout.addWidget(QLabel("<b>Version:</b> 1.0"))
layout.addWidget(QLabel("Copyright 2015 Mozarella Inc."))
for i in range(layout.count()):
layout.itemAt(i).setAlignment(Qt.AlignmentFlag.AlignHCenter)
layout.addWidget(self.buttonBox)
self.setLayout(layout)
代码地址:
GitHub - chunlaiqingke/Tiny-Tool
公众号