【MayaPySide】カラーインディケーターっぽいものを作る【PySide2】
Tips,PySide,PySide2,Python,Qt,MayaQLabel
今回は、画像を使わず、
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で確認できます
関連記事

QLabelに影を付ける
Twitterでラベルに影を付けるのは需要があるのかとつぶやいたところ意外と需要 ...

【MayaPySide】ちょっとおしゃれなUIメソッド【2日目】
こんにちはMayaPython Advent Calendar 2017の7日目 ...

ToolBoxに PySide のWidgetを追加してみよう
この記事はMaya Advent Calendar 2021の1日目の記事です ...

【Maya2018 – Bug】setWindowFlagsがうまく機能しない
MayaQWidgetBaseMixinを使用するとsetWindowFlags ...

Qt Style Sheets – QSS の理解を深めよう Subcontrol編 ②
初めに、この記事は Qt Style Sheets – QSS の理解を深めよう ...
ディスカッション
コメント一覧
まだ、コメントがありません