PySide (Qt for Python) は、Qt(キュート)の Python バインディングで、GUI などを構築するためのクロスプラットフォームなライブラリです。配布ライセンスは LGPL で公開されています。最新のバージョンは Qt6 に対応した PySide6(記事執筆時点で 6.4.0)です。
Qt 6.4.0 [1] に対応した Python 6.4.0 が先日リリースされて [2]、Matplotlib が使えなくなり、結構慌てています。
※ matplotlib 3.6.2 で問題は解消されたようです。[2022-11-08]
作成中のプログラムでは、Matplotlib が使えるようになるまで PySide6 をアップグレードせずに 6.3.2 のままで使い続けるようにするか、あるいは簡単なプロットであれば Matplotlib を使うのを止めて QChart に切り替える処置を取っています。
参考サイト [2] によると、
PySideは、Qt(C++ のルーツとそれを伴うもの)でありながら、Python の特徴も併せ持つという興味深い立場にあります。可能な限り、PySide を Python の慣例に合わせ、意味があればできるだけ多くの Python の機能を使うように努めています。
そのような分野の1つとして、今回取り組んだのは enum です。enum はバインドされた C++ クラスとして実装されていましたが、このバージョンでは Python 独自の enum 機構を活用するように変更されました。
Matplotlib の不具合は、この enum の変更に起因するもののようですが、Matplotlib を利用していないサンプルでも影響を受けている箇所が多々あります。
今回は、そんな中で、Qt の組み込みアイコンを利用するサンプルについて、PySide6 6.4.0 に対応したものを紹介します。
下記の OS 環境で動作確認をしました。
![]() |
Fedora Linux 37 | (Server Edition) | x86_64 |
python3.10 | python3.10-3.10.7-1.fc37.x86_64 | ||
PySide6 | 6.4.0 |
※ Fedora Linux 37 は執筆時点では正式リリース前のβ版です。
# Reference: | |
# https://www.pythonguis.com/faq/built-in-qicons-pyqt/ | |
import sys | |
from PySide6.QtWidgets import ( | |
QApplication, | |
QGridLayout, | |
QPushButton, | |
QStyle, | |
QWidget, | |
) | |
class Example(QWidget): | |
def __init__(self): | |
super().__init__() | |
self.init_ui() | |
self.setWindowTitle('Qt Standard Pixmaps') | |
def init_ui(self): | |
icons = sorted([attr for attr in dir(QStyle.StandardPixmap) if attr.startswith("SP_")]) | |
layout = QGridLayout() | |
self.setLayout(layout) | |
for n, name in enumerate(icons): | |
btn = QPushButton(name) | |
btn.setStyleSheet('text-align:left;') | |
pixmap_icon = getattr(QStyle.StandardPixmap, name) | |
icon = self.style().standardIcon(pixmap_icon) | |
btn.setIcon(icon) | |
layout.addWidget(btn, n / 4, n % 4) | |
def main(): | |
app = QApplication(sys.argv) | |
ex = Example() | |
ex.show() | |
sys.exit(app.exec()) | |
if __name__ == '__main__': | |
main() |
まあ、結局、下記の赤字の部分だけなんですが、知っていると移行が楽になります。
icons = sorted([attr for attr in dir(QStyle.StandardPixmap) if attr.startswith("SP_")])
参考サイト

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

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