次の項目は別ページに分割しました。
関連ページ:
Blender におけるスクリプトの使い方一般については次のページにまとめています。
使い方
要素
label
: ラベル – 文字列を表示するseparator
: セパレーターoperator
: オペレーターを実行するボタンを配置するprop
: プロパティを表示する
レイアウト
row
: 行 – 要素を横に並べるcolumn
: 列 – 要素を縦に並べるbox
: ボックス – 要素を枠で囲うsplit
: 左右に分割する
プロパティ
scale_x
: X方向の拡大縮小率scale_y
: Y方向の拡大縮小率alignment
: 要素の整列方法を指定するLEFT
: 左寄せCENTER
: 中央寄せRIGHT
: 右寄せ
alert
: 警告として表示するemboss
: エンボス表示の有効/無効を切り替えるactive
: 表示がアクティブかどうかを切り替えるenabled
: 操作可能かどうかを切り替える
コード:
Basic UI Example (p2or) – GitHub Gist
参考:
メニューの作り方/様々なレイアウト要素の紹介 | 忘却まとめ
UI を制御する | はじめての Blender アドオン開発
How to create a custom UI? – Blender Stack Exchange
メニューを作成する
ドキュメント:
Menu | Blender Python API [Official]
メニューに項目を追加する
サブメニューを追加する。
class EXAMPLE_MT_menu(bpy.types.Menu):
bl_label = "Example"
bl_description = "Example Menu"
def draw(self, context):
layout = self.layout
layout.operator('transform.resize')
def menu_func(self, context):
layout = self.laytout
layout.separator()
layout.menu('EXAMPLE_MT_menu')
def register():
bpy.utils.register_class(EXAMPLE_MT_menu)
bpy.types.VIEW3D_MT_object.append(menu_func)
def def unregister():
bpy.utils.unregister_class(EXAMPLE_MT_menu)
bpy.types.VIEW3D_MT_object.remove(menu_func)
Code language: Python (python)
参考:
サブメニューを作成する | はじめての Blender アドオン開発
Official keymap example does not work? – Blender Developer Talk
How to add a custom object entry to the add menu? – Blender Stack Exchange
How to add a custom menu item to the object menu? – Blender Stack Exchange
Deleting unwanted New objects in the “add Object” menu – Blender Stack Exchange
Operator docstrings displayed on buttons, not in search mode – Blender Stack Exchange
メニューを置き換える
参考:
How to delete an existing menu? – Blender Stack Exchange
ダイアログ/ポップアップを表示する
ドキュメント:
Dialog Box | Blender Python API [Official]
参考:
UI を制御する #3 | はじめての Blender アドオン開発
Blender でボタンが押されたときポップアップウインドウを表示する (dskjal) – GitHub Gist
Creating pop-up panels with user UI in Blender add-on | Interplanety
列/行を作成する (column / row)
ドキュメント:
User Interface Layout – Best Practice | Blender Python API [Official]
参考:
User interface elements alignment by columns | Interplanety
How do I use multiple columns in my add-on UI? – Blender Stack Exchange
vertical align of mixed panel? – Blender Stack Exchange
グリッドフロー (grid_flow / column_flow)
ドキュメント:
bpy.types.UILayout.grid_flow | Blender Python API [Official]
bpy.types.UILayout.column_flow | Blender Python API [Official]
参考:
column align – Blender Stack Exchange
Creating a row of boolean properties (with icons) aligned in a UI panel – Blender Stack Exchange
How to make the UI interractive to it’s size? – Blender Stack Exchange
Is there any way to override UILayout.prop tooltip? – Blender Stack Exchange
How to make grid_flow aligned? – Developer Forum
スプリット (split)
ドキュメント:
bpy.types.UILayout.split | Blender Python API [Official]
bpy.types.UILayout.use_property_split | Blender Python API [Official]
参考:
keeping a UIlayout box a specific width percentage – Blender Artists Community
How to control spacing / alignment of Label + Horizontal Enum Property? – Blender Stack Exchange
How to create UIList with auto-aligned three columns? – Blender Stack Exchange
プロパティ欄を作成する (prop)
必須
data
: データオブジェクトproperty
: プロパティ名
任意
text
: 指定された場合、自動的に割り当てられるテキストを上書きするtext_ctxt
: テキストの翻訳コンテキストを上書きするtranslate
: 翻訳を適用するicon
: 自動的に割り当てられるアイコンを上書きするexpand
slider
: 数値にスライダーウィジェットを用いるtoggle
: 真偽値にトグルウィジェットを用いる (デフォルトでは、アイコンが表示されている場合にのみトグルウィジェットを用いる)icon_only
: アイコンのみを表示する (テキストを表示しない)event
full_event
emboss
index
icon_value
: アイコン番号を整数値で指定する/自動的に割り当てられるアイコンを上書きするinvert_checkbox
: チェックボックスの表示を反転する
ドキュメント:
bpy.types.UILayout.prop | Blender Python API [Official]
参考:
Display an integer property as a percent? – Blender Artists Community
トグルボタンを配置する
参考:
シェーディングタイプを切り替える選択肢ボタンを並べて配置する | MR が楽しい
オブジェクトを選択する
スポイトアイコン付きのオブジェクト選択欄を作成する。
参考:
Object selection box with eye dropper – Blender Stack Exchange
Make the eyedropper tool available in add-ons via Python – Right-Click Select
ドロップダウンリストを作成する
参考:
create drop-down list in menu panel – Blender Stack Exchange
GUI を作成する
参考:
Addon のチェックボックスの追加とプロパティへのアクセス | ぬの部屋 (仮)
Interface – Code Snippets | wiki.blender.jp
アイコンを表示する
- 使用できるアイコンを確認する → Icon Viewer
- オンラインで探す → Blendicons
ドキュメント:
UILayout.prop | Blender Python API [Official]
UILayout.label | Blender Python API [Official]
Custom Icon Example – bpy.utils.previews | Blender Python API [Official]
参考:
アドオンで追加したボタンにアイコンを表示する | MR が楽しい
Icon Viewer を使ってアイコンの ID を確認する | MR が楽しい
New icons for Blender 2.8x – Blender Developer Talk [Official]
2.8 Outlined / Coloured Icon Adaptation – Blender Developer Talk [Official]
Colored icons in add-on – Blender Developer Talk [Official]
New icons for Blender 2.8 – Blender Artists Community
2.8 Outlined / Coloured Icon Adaptation – Blender Artists Community
How to edit 2.8 UI icons? – Blender Stack Exchange
Is there a way to get icon_value for the UIList using icon name from enum? – Blender Stack Exchange
material icon_value for UIList – Blender Stack Exchange
How can I add custom icon for my operators in a specific addon? – Blender Stack Exchange
How to implement custom icons for my script / addon? – Blender Stack Exchange
項目に色を付ける (alert)
参考:
In Python is it possible to change the background color of a property ui? – Blender Stack Exchange
項目の順序
append
: 最後に追加するprepend
: 最初に追加する
コード:
append – bpy_types.py at 2e06c223cc – GitHub
prepend – bpy_types.py at 2e06c223cc – GitHub
_GenericUI – bpy_types.py at 2e06c223cc – GitHub
参考:
Rearranging elements of a panel – Blender Stack Exchange
メニューからパイメニューを開く
オブジェクトコンテキストメニューからスナップパイメニューを開く。
import bpy
def custom_memu(self, context):
layout = self.layout
op = layout.operator("wm.call_menu_pie", text="Snap")
op.name = "VIEW3D_MT_snap_pie"
layout.separator()
def register():
bpy.types.VIEW3D_MT_object_context_menu.prepend(custom_menu)
def unregister():
bpy.types.VIEW3D_MT_object_context_menu.remove(custom_menu)
if __name__ == '__main__':
register()
Code language: Python (python)
参考:
pie menu inside pie menu – Blender Stack Exchange
プロパティを読み取り専用にする
参考:
How can I display a FloatVector without it being editable by the user? – Blender Stack Exchange
スペシャルメニューに項目を追加する
参考:
スペシャルメニューに任意のメニューを追加するアドオンを作る方法 | 気まぐれブロマガ
Blender 2.8: Where is the Specials Menu? | Blender 3D Architect
ポップオーバー (popover)
ドキュメント:
bpy.types.UILayout.popover | Blender Python API [Official]
イベント (Event)
ドキュメント:
Event (bpy.types.Event) | Blender Python API [Official]
参考:
スクリプトでマウスやキーボードのイベントを扱う方法 – Qiita
What are the parameters event and full_event of UILayout are for? – Blender Stack Exchange
prop_search
参考:
prop_search の使い方 | blender-script メモ
Object selection box in addon – Blender Stack Exchange
Limit “prop_search” to specific types of objects – Blender Stack Exchange
Search custom properties in objects on the scene – Blender Stack Exchange
What UI would work for choosing from a long, long list? – Blender Stack Exchange
How to make my prop search show the objects in my scene? – Blender Stack Exchange
メッセージを出力する (report)
ドキュメント:
bpy.types.Operator.report | Blender Python API [Official]
参考:
UI パネルの処理にエラーメッセージの表示を追加する | MR が楽しい
Is it possible to print to the Report window in the Info view? – Blender Stack Exchange
How to script add-on info and warnings? – Blender Stack Exchange
プログレスバー
参考:
How to show to the user a progression? – Blender Stack Exchange
ヘッダー
bpy.types.EDITOR_TYPE_HT_header
に描画関数を追加する。
エディター別のヘッダー型
- 3D ビューポート:
VIEW3D_HT_header
- 画像エディター:
IMAGE_HT_header
- UV エディター:
IMAGE_HT_header
- コンポジター:
NODE_HT_header
- テクスチャノードエディター:
NODE_HT_header
- ジオメトリノードエディター:
NODE_HT_header
- シェーダーエディター:
NODE_HT_header
- ビデオシーケンサー:
SEQUENCER_HT_header
- 動画クリップエディター:
CLIP_HT_header
- ドープシート:
DOPESHEET_HT_header
- タイムライン:
DOPESHEET_HT_header
- グラフエディター:
GRAPH_HT_header
- ドライバー:
GRAPH_HT_header
- ノンリニアアニメーション:
NLA_HT_header
- テキストエディター:
TEXT_HT_header
- Python コンソール:
CONSOLE_HT_header
- 情報:
INFO_HT_header
- アウトライナー:
OUTLINER_HT_header
- プロパティ:
PROPERTIES_HT_header
- ファイルブラウザー:
FILEBROWSER_HT_header
- アセットブラウザー:
FILEBROWSER_HT_header
- スプレッドシート:
SPREADSHEET_HT_header
- プリファレンス:
USERPREF_HT_header
ドキュメント:
Header | Blender Python API [Official]
参考:
How to Check the List of Operators Added to the Area Header | Interplanety
Add a button to the Timeline to jump – Blender Stack Exchange
Timeline header python modification – Blender Stack Exchange
Add custom menu at specific location in the header – Blender Stack Exchange
マテリアル選択欄を作成する
コード:
Material UIList Demo (p2or) – GitHub Gist
参考:
Create an interface which is similar to the material list box – Blender Stack Exchange
ツールチップを動的に変更する
参考:
Is there any way to override UILayout.prop tooltip? – Blender Stack Exchange
デバッグする
参考:
get operator command from context menu? – Blender Stack Exchange
UILayout
ドキュメント:
UILayout | Blender Python API [Official]
UIList
ドキュメント:
UIList | Blender Python API [Official]
サンプル/テンプレート
リポジトリ:
コード:
release/scripts/templates_py – GitHub
Basic UI Example (p2or) – GitHub Gist
A Commented Template for Making Simple UI using bpy Python API (tin2tin) – GitHub Gist
入手:
はじめての Blender アドオン開発 v3 サンプルアドオン集 | COLORFUL PICO
Tips
User Interface Layout – Best Practice | Blender Python API [Official]
List Manipulation – Best Practice | Blender Python API [Official]
まとめ
アドオンのメニューを追加する/既存メニューを完全に置き換える/他アドオンのメニューも保持する | 忘却まとめ
メニューの作り方/様々なレイアウト要素の紹介 | 忘却まとめ
Interface – Code Snippets | Blender Wiki Archive
Blender Icons
リポジトリ:
Shrinks99/blender-icons: Blender’s icons have all been stored in a single SVG file – GitHub
デモ:
Blendicons (wilkinson.graphics)
Icon Viewer
テキストエディター
サイドバーで「Dev」タブを開いて、「Icon Viewer」パネルでアイコン一覧を確認する。
Python コンソール
ヘッダーの「Icon Viewer」ボタンを押して、ダイアログでアイコン一覧を確認する。
動画:
ドキュメント:
Icon Viewer | Blender Manual [Official]
参考:
Icon Viewer を使ってアイコンの ID を確認する | MR が楽しい
Icon Viewer – 標準装備アイコンの名前を確認できる | CGrad Project
Layout Practice
学習用サンプル
入手:
Layout Practice – UI Layoutを学習するアドオン | Gumroad
UI Layout を学習するアドオン | Bookyakuno
参考: