PySide (Qt for Python) は、Qt(キュート)の Python バインディングで、GUI などを構築するためのクロスプラットフォームなライブラリです。Linux/X11, macOS および Microsoft Windows をサポートしています。配布ライセンスは LGPL で公開されています。
下記の OS 環境で動作確認をしています。
![]() |
Fedora Linux 36 | x86_64 |
Python | 3.10.4 | |
PySide6 | 6.3.0 |

左の画像 circle.png を、指定した色で乗りつぶしてアイコンとして利用するサンプルを備忘録としてまとめました。
下記サンプル qt_pushbutton_image.py の get_colored_icon 関数では、画像の透明レイヤーをマスクにして、指定した色で単純に塗りつぶしています。何に使いたかったかと言うと、Matplotlib で作成した Scatter プロットの凡例をボタンで表示して、これでインタラクティブな操作をしたかったのです。
qt_pushbutton_image.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
#!/usr/bin/env python | |
# coding: utf-8 | |
import sys | |
from PySide6.QtCore import Qt | |
from PySide6.QtGui import ( | |
QColor, | |
QIcon, | |
QPixmap, | |
) | |
from PySide6.QtWidgets import ( | |
QApplication, | |
QPushButton, | |
QSizePolicy, | |
QVBoxLayout, | |
QWidget, | |
) | |
def get_colored_icon(file_image: str, name_color: str) -> QIcon: | |
""" | |
get_colored_icon | |
:param file_image: file name of image | |
:param name_color: color code | |
:return: QIcon filled with specified color | |
""" | |
pixmap = QPixmap(file_image) | |
mask = pixmap.createMaskFromColor(QColor('transparent'), Qt.MaskInColor) | |
pixmap.fill(QColor(name_color)) | |
pixmap.setMask(mask) | |
return QIcon(pixmap) | |
class Example(QWidget): | |
def __init__(self): | |
super().__init__() | |
self.init_ui() | |
self.setWindowTitle('PushButton') | |
def init_ui(self): | |
layout = QVBoxLayout() | |
self.setLayout(layout) | |
image = 'circle.png' | |
for color in ['red', 'green', 'blue']: | |
icon = get_colored_icon(image, color) | |
btn = QPushButton(icon, color) | |
btn.setStyleSheet('text-align:left; font-size:18pt;') | |
btn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) | |
btn.clicked.connect(self.button_clicked) | |
layout.addWidget(btn) | |
def button_clicked(self): | |
obj = self.sender() | |
print('\'%s\' button is clicked.' % obj.text()) | |
def main(): | |
app = QApplication(sys.argv) | |
ex = Example() | |
ex.show() | |
sys.exit(app.exec()) | |
if __name__ == '__main__': | |
main() |
qt_pushbutton_image.py の実行例
参考サイト

にほんブログ村
0 件のコメント:
コメントを投稿