使い方

要素
  • 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)

参考:

プラグインでサブメニューを作成する方法 – Qiita

UI に項目を追加 | TomoG のごちゃまぜ倉庫

サブメニューを作成する | はじめての Blender アドオン開発

メニューの追加登録候補について | nikogoli

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 が楽しい

Is it possible to arrange the 2 or 3 items of Enum Property in one row and others is second or third? – Blender Stack Exchange

オブジェクトを選択する

スポイトアイコン付きのオブジェクト選択欄を作成する。

参考:

オブジェクト指定のアドオンスクリプト | 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

アイコンを表示する

ドキュメント:

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

Is there a list or something available which shows the code of the Symbols of Blender – Blender Stack Exchange

How to edit 2.8 UI icons? – Blender Stack Exchange

Changing the name / icon / function of menu / pie menu / panel with a condition? – 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

How to change the order of a custom function added in the dropdown menu in the header region – 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]

サンプル/テンプレート

リポジトリ:

python_api/examples – GitHub

コード:

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]

まとめ

アドオンのメニューを追加する/既存メニューを完全に置き換える/他アドオンのメニューも保持する | 忘却まとめ

メニューの作り方/様々なレイアウト要素の紹介 | 忘却まとめ

Blender 関連の雑多なメモ類 | nikogoli

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」ボタンを押して、ダイアログでアイコン一覧を確認する。

動画:

How to Use (Steven Scott)

ドキュメント:

Icon Viewer | Blender Manual [Official]

参考:

Icon Viewer を使ってアイコンの ID を確認する | MR が楽しい

Icon Viewer – 標準装備アイコンの名前を確認できる | CGrad Project

Layout Practice

学習用サンプル

入手:

Layout Practice – UI Layoutを学習するアドオン | Gumroad

UI Layout を学習するアドオン | Bookyakuno

参考:

メニューの作り方/様々なレイアウト要素の紹介 | 忘却まとめ

記事をシェアする:
タグ:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Protected by reCAPTCHA