PySide (Qt for Python) は、Qt(キュート)の Python バインディングで、GUI などを構築するためのクロスプラットフォームなライブラリです。Linux/X11, macOS および Microsoft Windows をサポートしています。配布ライセンスは LGPL で公開されています。
※ 元のサンプルコードを変更したので、それに合わせて過去記事に修正を加えて、日付を変更して移動しました。
QWebEngineView はウェブブラウザのエンジンのクラスです [1]。このクラスについては、以前、PySide2 のときに簡単なサンプルを紹介しました [2]。しかし、もう少し良いサンプルが、Qt for Python のサイトで紹介されていたので、それを引用して、自分用に扱いやすいように直しています。
下記の OS 環境で動作確認をしています。
![]() |
Fedora Workstation 39 | x86_64 |
Python | 3.11.6 | |
PySide6 | 6.6.1 |
qt_webengineview.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# https://doc.qt.io/qtforpython/examples/example_webenginewidgets__simplebrowser.html | |
# Copyright (C) 2022 The Qt Company Ltd. | |
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause | |
"""PySide6 WebEngineWidgets Example""" | |
import sys | |
from PySide6.QtCore import QUrl, Signal | |
from PySide6.QtWebEngineCore import QWebEnginePage | |
from PySide6.QtWebEngineWidgets import QWebEngineView | |
from PySide6.QtWidgets import ( | |
QApplication, | |
QLineEdit, | |
QMainWindow, | |
QPushButton, | |
QStyle, | |
QToolBar, | |
) | |
class WebToolBar(QToolBar): | |
Back = Signal() | |
Forward = Signal() | |
Load = Signal(str) | |
def __init__(self): | |
super().__init__() | |
self.address = None | |
self.init_ui() | |
def init_ui(self): | |
but_back = QPushButton() | |
icon_back = self.style().standardIcon(QStyle.StandardPixmap.SP_ArrowBack) | |
but_back.setIcon(icon_back) | |
but_back.clicked.connect(self.back) | |
self.addWidget(but_back) | |
but_forward = QPushButton() | |
icon_forward = self.style().standardIcon(QStyle.StandardPixmap.SP_ArrowForward) | |
but_forward.setIcon(icon_forward) | |
but_forward.clicked.connect(self.forward) | |
self.addWidget(but_forward) | |
self.address = address = QLineEdit() | |
address.returnPressed.connect(self.load) | |
self.addWidget(address) | |
def back(self): | |
self.Back.emit() | |
def forward(self): | |
self.Forward.emit() | |
def load(self): | |
lineedit: QLineEdit = self.sender() | |
self.Load.emit(lineedit.text()) | |
def setURL(self, url: QUrl): | |
self.address.setText(url.toString()) | |
class Example(QMainWindow): | |
def __init__(self): | |
super().__init__() | |
self.toolbar = None | |
self.view = None | |
url = QUrl('https://www.qt.io/') | |
self.init_ui(url) | |
self.resize(1000, 800) | |
def init_ui(self, url_init: QUrl): | |
self.toolbar = toolbar = WebToolBar() | |
toolbar.Back.connect(self.back) | |
toolbar.Forward.connect(self.forward) | |
toolbar.Load.connect(self.load) | |
self.addToolBar(toolbar) | |
self.view = view = QWebEngineView() | |
self.setCentralWidget(view) | |
toolbar.setURL(url_init) | |
view.load(url_init) | |
view.page().titleChanged.connect(self.setWindowTitle) | |
view.page().urlChanged.connect(self.url_changed) | |
def load(self, url_str: str): | |
url = QUrl.fromUserInput(url_str) | |
if url.isValid(): | |
self.view.load(url) | |
def back(self): | |
self.view.page().triggerAction(QWebEnginePage.WebAction.Back) | |
def forward(self): | |
self.view.page().triggerAction(QWebEnginePage.WebAction.Forward) | |
def url_changed(self, url: QUrl): | |
self.toolbar.setURL(url) | |
def main(): | |
app = QApplication() | |
ex = Example() | |
ex.show() | |
sys.exit(app.exec()) | |
if __name__ == '__main__': | |
main() |
qt_webengineview.py の実行例
参考サイト
- QWebEngineView - Qt for Python
- bitWalk's: QWebEngineView を使う (PySide2) [2021-03-28]
- Simple Browser Example - Qt for Python

にほんブログ村
#オープンソース

0 件のコメント:
コメントを投稿