【PySide】QToolButton ボタン色が反映されない解決法

こんにちは、COYOTE 3DCG STUDIO TAのやまたくです。
今回はMaya Pysideで、
QToolButtonにスタイルシート(Qt Style Sheets)を設定した際のトラブルと解決事例をご紹介します。

UI起動時にQToolButtonのbackground-colorが反映されない

QToolButtonはボタンが押されるまでbackground-color(ボタン色)が反映されません。
また、ウィンドウサイズを変更すると元に戻ってしまいます。

▼動作確認用サンプルコード

from maya.app.general import mayaMixin
from PySide2 import QtWidgets, QtGui

class MainWindow(mayaMixin.MayaQWidgetBaseMixin, QtWidgets.QMainWindow):
    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)

        # ツールボタンの作成
        toolButton = QtWidgets.QToolButton(self)
        toolButton.setText("QToolButton")
        toolButton.setStyleSheet("QToolButton { background-color: red; color: yellow; }")

        # プッシュボタンの作成
        pushButton = QtWidgets.QPushButton("QPushButton", self)
        pushButton.setStyleSheet("QPushButton { background-color: blue; color: yellow; }")

        # ツールボタンとプッシュボタンを配置するためのレイアウト
        layout = QtWidgets.QVBoxLayout()
        layout.addWidget(toolButton)
        layout.addWidget(pushButton)
        
        # ウィジェットをセットアップし、レイアウトを適用
        centralWidget = QtWidgets.QWidget()
        centralWidget.setLayout(layout)
        self.setCentralWidget(centralWidget)

# ウィンドウインスタンスを作成し、表示
window = MainWindow()
window.show()

下記フォーラムで同じ問題が報告されていますが、解決には至っていないようです。
https://discourse.techart.online/t/maya-ui-qtoolbutton-not-active-on-creation/11845

調べても解決策が見つからなかったので、自己流ですが解決事例のご紹介です。

background-imageを使う

background-colorではなくbackground-imageを使います。
するとUI起動時に色が反映されます。
また、ウィンドウサイズを変更しても元に戻らなくなります。

from maya.app.general import mayaMixin
from PySide2 import QtWidgets, QtGui

class MainWindow(mayaMixin.MayaQWidgetBaseMixin, QtWidgets.QMainWindow):
    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)

        # ツールボタンの作成
        toolButton = QtWidgets.QToolButton(self)
        toolButton.setText("QToolButton")
        toolButton.setStyleSheet("QToolButton { background-image: url(D:/pathToImage/ButtonColor.jpg); color: yellow;}")

        # プッシュボタンの作成
        pushButton = QtWidgets.QPushButton("QPushButton", self)
        pushButton.setStyleSheet("QPushButton { background-color: blue; color: yellow; }")

        # ツールボタンとプッシュボタンを配置するためのレイアウト
        layout = QtWidgets.QVBoxLayout()
        layout.addWidget(toolButton)
        layout.addWidget(pushButton)
        
        # ウィジェットをセットアップし、レイアウトを適用
        centralWidget = QtWidgets.QWidget()
        centralWidget.setLayout(layout)
        self.setCentralWidget(centralWidget)

# ウィンドウインスタンスを作成し、表示
window = MainWindow()
window.show()

テスト

D:/pathToImage/ButtonColor.jpg

ボタンが縁取りされてしまうので、

border: none;

を追加するとQPushButtonと同じようなフラットな見た目になります。

おわりに

一般的にはQPushButtonの使用で十分な場合が多いですが、
アイコン付きボタンはQToolButtonが非常に便利です。

この解決事例が、同じ問題を抱えている方々の助けになれば嬉しいです。

そして余談ですが、Maya 2025ではPySide2からPySide6への移行が行われました。
私たちCOYOTE 3DCG STUDIO は内製ツールのPySide2 to PySide6を進めています。
少なからず互換性問題がありますので、またいつか移行録をご紹介できればと考えています。


COYOTE 3DCG STUDIO

公式HP:https://3d.crdg.jp/

COYOTE 3DCG STUDIOはクリーク・アンド・リバー社が運営するゲーム専門3DCG制作集団です。
キャラモデル、背景モデル、3Dアニメーション、テクニカルアーティストによるツール開発などを得意としています。
新規立ち上げにおけるコンサルティングから量産制作まで幅広く対応可能な体制を保有しており、出向にも柔軟に対応しております。


yamamoto takuya

COYOTE 3DCG STUDIO ツール作成・パイプライン系TA。
Maya, Photoshop, Unityのツール開発やサーバー管理を行っています。
Qtを使ったUI作成が好きです。
老後は猫と暮らしたい。

投稿者記事

  1. 【Photoshop】起動時にスクリプトを実行する方法

    2023-08-29

  2. 【PySide】QtDesignerでDrag and DropできるWidget設定

    2023-06-28

  3. Mayaツール開発入門!コマンド調査テクニック

    2022-10-26

関連記事

  1. melでのvector活用術 ~その3~ RotatePlaneIKを作ってみる③

    2020-07-30

  2. PM(プロジェクトマネージャー)とは

    2020-08-25

  3. 【Unreal Engine】ブループリントを使用してFBXのインポートを自動化する方法

    2022-12-07

  4. 【Maya】Maya2018~20の日本語フォルダのプロジェクト設定

    2019-11-12

スキルレーダーチャート

テクニカルアーティスト専用
スキルレーダーチャート
どなたでも無料でご利用いただけます。

ABOUT

TECH COYOTE​

テクニカルアーティストの為のまとめサイトです。​
本サイトでは、ツール開発、業務効率化等について情報発信をしていきます。

COYOTE 3DCG STUDIO

C&R Creative Studios

RECENT TWEET

ページ上部へ戻る