On this page |
概要 ¶
独自のカスタムカラーを毎回指定しなければならないという面倒事をなくすために、事前に定義されたカラーのリストからユーザがカラーを選択できるようにしたい場合があります。 例えば、ユーザインターフェース内でアイテムを色別に“タグ付け”すれば、それらのアイテムを整理することができます。
このウィジェットでは、カラーのリストを指定することができ、ユーザはそのリストからカラーを選択し、必要あればそのカラーを編集することができます。
このオブジェクトは以下の2通りの使い方があります:
-
パレットウィンドウがパッと現れて、ユーザがカラーをクリックすると、そのパレットウィンドウが消えるポップアップウィンドウとして使用することができます。
-
または、ウィジェットレイアウト内に通常のQtウィジェットとして埋め込むことができます。これは、例えば、何かのカラーを選択するためのパレットを用意したいプリファレンスウィンドウで役に立ちます。
ColorPaletteをポップアップとして使用する方法 ¶
このカラーパレットは モードレス です。 そのため、カレーパレットが開いてもスクリプトは引き続き実行されるので、シグナルを使用して、ユーザがそのパレットをどのように操作しているのかフィードバックを取得する必要があります。
class MyWindow(QtWidgets.QDialog): def __init__(self, parent=None): super(MyWindow, self).__init__(parent) self._colors = [ QtGui.QColor(255, 0, 0), QtGui.QColor(0, 255, 0), QtGui.QColor(0, 0, 255), QtGui.QColor(255, 255, 0), QtGui.QColor(255, 0, 255), QtGui.QColor(0, 255, 255), QtGui.QColor(255, 128, 0), QtGui.QColor(255, 255, 255), QtGui.QColor(0, 0, 0), ] self._palette = ColorPalette(self._colors) self._palette.colorSelected.connect(self._chose_color) layout = QtWidgets.QVBoxLayout() self.setLayout(layout) self._label = QtWidgets.QLabel("No color") layout.addWidget(self._label) self._button = QtWidgets.QPushButton("Choose") self._button.clicked.connect(self._palette.show) layout.addWidget(self._button) def _chose_color(self, ix, color): msg = "Color #{}, R: {}, G: {}, B: {}".format( ix, color.red(), color.green(), color.blue() ) self._label.setText(msg)
Note
このウィジェットへの持続的な参照が少なくとも1個なければならないことを忘れないでください。 そうしないと、そのウィンドウがガーベジコレクションされて即座に閉じられてしまいます。
Qtレイアウト内にColorPaletteをウィジェットとして埋め込む方法 ¶
単にListEditor
をウィジェットとして使用し、シグナルを使用することで、ユーザがそのパレットを操作した時に反応を起こすことができます。
class MyWindow(QtWidgets.QDialog): def __init__(self, parent=None): super(MyWindow, self).__init__(parent) self._colors = [ QtGui.QColor(255, 0, 0), QtGui.QColor(0, 255, 0), QtGui.QColor(0, 0, 255), QtGui.QColor(255, 255, 0), QtGui.QColor(255, 0, 255), QtGui.QColor(0, 255, 255), QtGui.QColor(255, 128, 0), QtGui.QColor(255, 255, 255), QtGui.QColor(0, 0, 0), ] layout = QtWidgets.QVBoxLayout() self.setLayout(layout) self._label = QtWidgets.QLabel("No color") layout.addWidget(self._label) self._palette = ColorPalette(self._colors, size=24) self._palette.colorSelected.connect(self._chose_color) self._palette.colorEdited.connect(self._edited_color) layout.addWidget(self._palette) def _chose_color(self, ix, color): msg = "Color #{}, R: {}, G: {}, B: {}".format( ix, color.red(), color.green(), color.blue() ) self._label.setText(msg)
スウォッチレイアウト ¶
-
ウィジェットのサイズは、スウォッチサイズ(イニシャライザの
size
引数)とパレット内のカラー数から求まります。 -
デフォルトでは、カラーパレットはできるだけ正方形になるようにスウォッチの配置を試みます。
-
配置するカラーの数が十分でない場合、スウォッチに空きができます。
-
イニシャライザの
columns
引数を指定すると、ウィジェットはその指定した列幅に固定され、行が増えるほどスウォッチは下に配置されていきます。 -
イニシャライザの
rows
引数を指定すると、ウィジェットはその指定した行幅に固定され、列が増えるほどスウォッチは右に配置されていきます。 -
rows
引数とcolumns
引数の両方を指定すると、そのレイアウトは、 カラーリストのカラーが収まり切らなくても その行と列の幅のとおりになります。 -
デフォルトでは、カラーリストのカラーは、1行目の左から右、次に2行目の左から右という順番で並びます。イニシャライザに
by_column=True
を渡すと、ウィジェットは1列目の上から下、次に2列目の上から下という順番でカラーを並べます。
ユーザがカラーを編集できるようにする方法 ¶
デフォルトでは、ユーザはパレット内のカラーをAltクリックすることで、そのスウォッチのカラー値を編集することができます。
編集したカラーをユーザが受け入れると(編集操作をキャンセルしなかった場合)、ウィジェットはcolorEdited
シグナルを送信します。
Note
編集したパレットはColorPaletteオブジェクト内で維持されます。 別のColorPaletteオブジェクトを使用した時でも別のセッションで使用した時でもそのパレットを持続させたいのであれば、あなた自身でその処理を加える必要があります。
ユーザがカラーを編集できないようにしたいのであれば、ウィジェットを作成する時にallow_editing=False
を渡すか、または、ウィジェットに対してsetEditingAllowed(False)
をコールしてください。
背景カラー ¶
-
デフォルトでは、ウィジェットの背景は、現行パレットのデフォルトのウィンドウ背景で塗られます。イニシャライザに
bg_color
引数を渡すことで、カスタムカラー(またはブラシ)を指定することができます。 -
空っぽのスウォッチは特別なブラシで塗られます。デフォルトのブラシは、暗いまたは明るい斜線を描画します。イニシャライザに
empty_color
引数を渡すことで、空っぽの正方形にカスタムカラー(またはブラシ)を指定することができます。
Tipsとメモ ¶
-
カラーリスト内の“カラー”には、
QColor
オブジェクトだけでなく、QBrush
オブジェクトも指定することができます。このQBrush
オブジェクトを使用することで、単色だけでなくグラデーション、パターン、テクスチャをパレット内のスウォッチとして設定することができます。
シグナル ¶
paletteChanged()
setColorList()
によってパレット全体が置換された時に発動されます。
colorEdited(index: int, old: QColor, new: QColor)
ユーザがカラーのどれかを手動で編集した時に発動されます(上記のカラーの編集を参照してください)。
colorSelected(index: int, color: QColor)
ユーザがパレット内のカラーを選択した時に発動されます。
ユーザが別のカラーにドラッグする度に、または、レイアウトにウィジェットが埋め込まれている場合だとユーザがカラー選択を変更する度に、シグナルを発動することができます。ユーザがポップアップからカラーを選択してそのポップアップが閉じた時にのみ反応を起こしたいのであれば、代わりにcolorAccepted
シグナルを使用してください。
colorAccepted(index: int, color: QColor)
ユーザがポップアップ内のカラー上でマウスボタンを離してそのポップアップが閉じた時にのみ発動されます。
colorCancelled()
ユーザが有効なカラーを選択せずにポップアップを閉じた場合(例えば、ポップアップ外をクリックしたり、空っぽの空間をクリックした場合)に発動されます。
メソッド ¶
__init__(colors=None, size=32, by_column=False, show_at_pointer=True, columns=None, rows=None, allow_editing=True, selected_index=-1, bg_color=None, empty_color=None, parent=None)
colors
ユーザが選択できるQColor
(またはQBrush
)オブジェクトのリスト。
この引数を指定しなかった場合、ウィジェットはデフォルトの16色のカラーパレットを使用します。
size
パレット内の個々のスウォッチ(カラー正方形)のサイズ(ピクセル数)。
by_column
これがTrue
の場合、カラーは行毎ではなく列毎に配置されます。
show_at_pointer
これがTrue
(デフォルト)の場合、show()
をコールすると、ポップアップウィンドウは自動的にマウスポインタを中心にして表示されます。
columns
表示するスウォッチの最大列数。
rows
表示するスウォッチの最大行数。
Note
rows
引数とcolumns
引数の両方を指定した場合、そのレイアウト内の正方形の数が固定され、カラーリスト内のカラー数がその固定した数を超えると、その分のカラーは表示されなくなります。
allow_editing
ユーザがカラースウォッチをAltクリックすることで、その空間のカラー値を変更できるようにします。
selected_index
ここに整数を渡すと、ウィジェットが表示された時にカラーリスト内のそのインデックスのカラーが既に選択された状態になります。
bg_color
ウィジェットにカスタム背景カラー(またはブラシ)を指定することができます。
empty_color
パレット内の空っぽの正方形にカスタムカラー(またはブラシ)を指定することができます。
parent
このウィジェットの親として設定するQWidget
。
この引数を指定しなかった場合、ウィジェットは自動的にHoudiniのメインウィンドウを親として使用します。
colorCount()
→ int
現行カラーリストのカラー数。
colorList()
→ list
パレットの作成に使用されるカラーのリストを返します。
setColorList(colors)
現行カラーリストを新しいカラーリストに置換します。このカラーリストの項目には、QColor
またはQBrush
オブジェクトを指定してください。
color(n)
→ QtGui.QColor
カラーリスト内のn
番目のカラーを返します。
setColor(n, color)
指定したQColor
(またはQBrush
)をカラーリスト内のn
番目のカラーに設定します。
swatchSize()
→ int
パレット内の個々の“スウォッチ”(カラー正方形)のサイズ(ピクセル数)を返します。
パレット全体のサイズは、この値とcolorCount()
から計算されます。
setSwatchSize(size)
パレット内の個々の“スウォッチ”(カラー正方形)のサイズ(ピクセル数)を設定します。
isEditingAllowed()
→ bool
ユーザがカラーをAltクリックして編集できる状態ならばTrueを返します。
setEditingAllowed(allow)
True
を渡すことで、ユーザはカラーをAltクリックして編集することができ、False
を渡すことで、ユーザはカラーを編集することができません。
selectedIndex()
→ int
現行カラーリストの選択されたカラーのインデックスを返します。
setSelectedIndex(ix)
指定したインデックスのカラーを選択します。
selectedColor()
→ QtGui.QColor
現在選択されているカラーを返します。