2024-09-24

QDesktopServices でブラウザ起動 ~ PySide6

PySide (Qt for Python) は、Qt(キュート)の Python バインディングで、GUI などを構築するためのクロスプラットフォームなライブラリです。Linux/X11, macOS および Microsoft Windows をサポートしています。配布ライセンスは LGPL で公開されています。

PySide6 では、Chromium をベースにした QWebEngineView クラスのインスタンスを利用できるので [1]、インターネット・ブラウザを利用したければ、アプリ側で必要な機能を実装したブラウザを用意して利用することができます。

しかしながら、いろいろな事情から OS デフォルト(既定)のインターネット・ブラウザを利用したい場合もあります。そんなときは、QDesktopServices クラスが提供している openUrl というスタティック・メソッド(ファンクション)を利用する方法があります [2]

QDesktopServices クラスの openUrl というスタティック・メソッドを利用したシンプルなサンプルを紹介します。

下記の OS 環境で動作確認をしています。

Fedora Linux Workstation 41 beta x86_64
Python 3.12.6
PySide6 6.7.2

以下がサンプル・プログラムです。

qt_desktop_services.py
import sys
from PySide6.QtCore import Qt, QUrl
from PySide6.QtGui import QDesktopServices
from PySide6.QtWidgets import (
QApplication,
QMainWindow,
QStyle,
QToolBar,
QToolButton,
)
class Example(QMainWindow):
def __init__(self):
super().__init__()
self.url = QUrl('https://doc.qt.io/qtforpython-6/')
self.setWindowTitle('open URL')
toolbar = QToolBar()
self.addToolBar(Qt.ToolBarArea.TopToolBarArea, toolbar)
but = QToolButton()
icon = self.style().standardIcon(
QStyle.StandardPixmap.SP_TitleBarMenuButton
)
but.setIcon(icon)
but.clicked.connect(self.on_click)
toolbar.addWidget(but)
def on_click(self):
QDesktopServices.openUrl(self.url)
def main():
app = QApplication(sys.argv)
ex = Example()
ex.show()
sys.exit(app.exec())
if __name__ == '__main__':
main()

サンプルの実行例を示しました。

ツールバーの Qt ボタンをクリックすると、デフォルトのブラウザが起動して、指定した URL が表示されるだけのサンプルです。

qt_desktop_services.py でデフォルトのブラウザを起動して指定 URL を表示した例

openUrl メソッドを利用するには、QDesktopServices クラスのインスタンスを作らずに、次のように直接クラスメソッドを指定します。

def on_click(self):
    QDesktopServices.openUrl(self.url)

ブラウザで指定した URL が表示されると、ウィンドウのフォーカスがブラウザの方へ移ってしまいます。

参考サイト

  1. QWebEngineView - Qt for Python
  2. QDesktopServices - Qt for Python

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

オープンソース - ブログ村ハッシュタグ
#オープンソース



0 件のコメント: