【MayaPySide】カラーインディケーターっぽいものを作る【PySide2】
今回は、画像を使わず、QLabel
を使用してカラーインディケーターっぽいものを作ってみたのでそれを紹介します
状態遷移を伝えるために使用したり、ピッカーみたいなものでも使用できますので活用できるかと思います
まずは、QLabel
を継承したクラスcolorIndicatorを用意していきます
class colorIndicator(QLabel): def __init__(self, parent=None, *args, **kwargs): super(colorIndicator, self).__init__(parent, *args, **kwargs)
続いて、self.resultImage
というQImage
を定義し、QPainter
で矩形を描画していきます
その際setColor
というコンストラクタを定義します
今回はアルファの値を使用しないため、画像フォーマットをFormat_RGB32
で定義し、QPainter
のsetBrush
とsetPen
にQColor
を定義します
そして、drawRect
で矩形の描画を定義しました
class colorIndicator(QLabel): def __init__(self, parent=None, setColor="#ffffff", *args, **kwargs): super(colorIndicator, self).__init__(parent, *args, **kwargs) self.resultImage = QImage(10, 10, QImage.Format_RGB32) self.painter = QPainter(self.resultImage) self.painter.begin(self.resultImage) self.painter.setBrush(QColor(setColor)) self.painter.setPen(QColor(setColor)) self.painter.drawRect(0, 0, 10, 10) self.painter.end()
次に先ほど定義したself.resultImage
をfromImage
を使用してPixmap
に変換します
そして変換したPixmap
をsetPixmap
でcolorIndicatorのPixmapを定義します
class colorIndicator(QLabel): def __init__(self, parent=None, setColor="#ffffff", *args, **kwargs): super(colorIndicator, self).__init__(parent, *args, **kwargs) self.resultImage = QImage(10, 10, QImage.Format_RGB32) self.painter = QPainter(self.resultImage) self.painter.begin(self.resultImage) self.painter.setBrush(QColor(setColor)) self.painter.setPen(QColor(setColor)) self.painter.drawRect(0, 0, 10, 10) self.painter.end() pixmap = QPixmap.fromImage(self.resultImage) self.setPixmap(pixmap)
これで、colorIndicatorの準備が終わりました
次はwidgetに実際に呼び出してみます
下のコードをひな型にコードを記述していきますのでご使用ください
#!/usr/bin/env python # -*- coding: utf-8 -*- import os import sys from Qt.QtWidgets import * from Qt.QtGui import * from Qt.QtCore import * class colorIndicator(QLabel): def __init__(self, parent=None, setColor="#ffffff", *args, **kwargs): super(colorIndicator, self).__init__(parent, *args, **kwargs) self.resultImage = QImage(10, 10, QImage.Format_RGB32) self.painter = QPainter(self.resultImage) self.painter.begin(self.resultImage) self.painter.setBrush(QColor(setColor)) self.painter.setPen(QColor(setColor)) self.painter.drawRect(0, 0, 10, 10) self.painter.end() pixmap = QPixmap.fromImage(self.resultImage) self.setPixmap(pixmap) class exampleWidget(QWidget): def __init__(self, *args, **kwargs): super(exampleWidget, self).__init__( *args, **kwargs) self.initUI() def initUI(self): self.setWindowTitle('colorIndicator') self.setGeometry(300, 400, 300, 200) def main(): app = QApplication.instance() ex = exampleWidget() ex.show() sys.exit() app.exec_() if __name__ == '__main__': main()
exampleWidget
のinitUI
にIndicator
というcolorIndicator
を定義し、QHBoxLayout
を使用して組み込みました
def initUI(self): self.setWindowTitle('colorIndicator') self.setGeometry(300, 400, 300, 200) Indicator = colorIndicator(self, setColor="#ff00ff") layout = QHBoxLayout(self) layout.addWidget(Indicator) self.setLayout(layout)
コードを実行すると上の画像のようなwindowが表示されます
フルコードは以下になります
#!/usr/bin/env python # -*- coding: utf-8 -*- import os import sys from Qt.QtWidgets import * from Qt.QtGui import * from Qt.QtCore import * class colorIndicator(QLabel): def __init__(self, parent=None, setColor="#ffffff", *args, **kwargs): super(colorIndicator, self).__init__(parent, *args, **kwargs) self.resultImage = QImage(10, 10, QImage.Format_RGB32) self.painter = QPainter(self.resultImage) self.painter.begin(self.resultImage) self.painter.setBrush(QColor(setColor)) self.painter.setPen(QColor(setColor)) self.painter.drawRect(0, 0, 10, 10) self.painter.end() self.setPixmap(QPixmap.fromImage(self.resultImage)) class exampleWidget(QWidget): def __init__(self, *args, **kwargs): super(exampleWidget, self).__init__(*args, **kwargs) self.initUI() def initUI(self): self.setWindowTitle('colorIndicator') self.setGeometry(300, 400, 300, 200) Indicator = colorIndicator(self, setColor="#ff00ff") layout = QHBoxLayout(self) layout.addWidget(Indicator) self.setLayout(layout) def main(): app = QApplication.instance() ex = exampleWidget() ex.show() sys.exit() app.exec_() if __name__ == '__main__': main()
画像フォーマットはQImage::Formatで確認できます
ディスカッション
コメント一覧
まだ、コメントがありません