サイドバーパネル

class MYTOOL_PT_render(bpy.types.Panel):
    """My Tool"""
    bl_idname      = 'MYTOOL_PT_render'
    bl_label       = "Render"
    bl_space_type  = 'VIEW_3D'
    bl_region_type = 'UI'
    bl_category    = "My Tool"

    def draw(self, context):
        layout = self.layout
        scene = context.scene

        layout.label(text="Size:")
        row = layout.row(align=True)
        row.prop(scene, "resolution_x")
        row.prop(scene, "resolution_y")

        layout.label(text="Are You Ready?:")
        row = layout.row()
        row.scale_y = 1.5
        row.operator("render.render")

def register():
    bpy.utils.register_class(MYTOOL_PT_render)

def unregister():
    bpy.utils.unregister_class(MYTOOL_PT_render)

if __name__ == "__main__":
    register()Code language: Python (python)

ドキュメント:

bpy.types.Panel | Blender Python API [Official]

参考:

UI パネルを追加する | MR が楽しい

UI パネルに自作のプロパティを追加する | MR が楽しい

Panel 編 | めもてう

Creating a Custom Panel with Blender’s Python API (Mina Pêcheux) | Geek Culture

Int Property not displaying in my panel? – Blender Stack Exchange

How to change the location of an addon in the UI – Blender Stack Exchange

Is there a code to draw a horizontal line or vertical space? – Blender Stack Exchange

サブパネル

パネルを実装するクラスで、bl_parent_id を指定する。

class VIEW3D_PT_overlay_example(bpy.types.Panel):
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'HEADER'
    bl_parent_id = 'VIEW3D_PT_overlay'
    bl_label = "Example"

    @classmethod
    def poll(cls, context):
        return context.active_object and context.active_object.type == 'MESH'

    def draw(self, context):
        layout = self.layout
        col = layout.column()
        col.label(text="Hello, World")

def register():
    bpy.utils.register_class(VIEW3D_PT_overlay_example)

def unregister():
    bpy.utils.unregister_class(VIEW3D_PT_overlay_example)Code language: Python (python)

ドキュメント:

bpy.types.Panel.bl_parent_id | Blender Python API [Official]

参考:

How can I know if a panel is the parent of other subpanels? – Blender Stack Exchange

Best way to store options for panels – Blender Stack Exchange

ボタンを設置する

class EXAMPLE_PT_xxx(bpy.types.Panel):
    # ...

    def draw(self, context):
        layout = self.layout

        layout.operator('object.transform_apply', text="Apply All Transforms")Code language: Python (python)

ドキュメント:

bpy.types.UILayout.operator | Blender Python API [Official]

項目を一時的に無効化する

enabled プロパティに False を指定する。

class EXAMPLE_PT_xxx(bpy.types.Panel):
    # ...

    def draw(self, context):
        layout = self.layout

        col = layout.column()
        col.enabled = False
        col.prop(scene, ...)Code language: Python (python)

ドキュメント:

UILayout.enabled | Blender Python API [Official]

参考:

プロパティの更新イベントと UI 切り替え | MR が楽しい

How to disable a single component in a custom panel? – Blender Artists Community

How to do i disable a row.operator in my custom panel by detecting if there is a specific modifier type and name is present or not? – Blender Stack Exchange

パネルを条件に応じて表示する (poll)

条件を判定してパネルの表示/非表示を切り替えるには、クラスメソッド poll を定義する。

import bpy

class EXAMPLE_PT_xxx(bpy.types.Panel):
    # ...

    @classmethod
    def poll(cls, context):
        return context.object is not NoneCode language: Python (python)

コード:

選択されているオブジェクトがメッシュで名前が Cube の時だけ UI を表示する (dskjal) – GitHub Gist

ドキュメント:

Simple Object Panel | Blender Python API [Official]

モジュールの読み込み順/パネルの順序

参考:

How to know the order in which scripts are loaded? – Blender Artists Community

How I can define the order of the panels? – Blender Stack Exchange

パネルを動的に登録する

参考:

Change Blender’s Preferences Dynamically – Blender Stack Exchange

サイドバータブ

こちらのページを参照

ドキュメント:

Human Interface Guidelines / Sidebar Tabs | Blender Developer Wiki [Official]

参考:

Trouble with vertical toolbar tabs! Any idea or script to fix this mess? – Blender Artists Community

Remove addons from tabs in 3D window – Blender Stack Exchange

N panel tab clutter – Right-Click Select

right toolbar needs improvment in 2.8 – Right-Click Select

More options for reordering workspaces and sidebar tabs – Right-Click Select

Toolbar / Sidebar Interface Issue – Blender Developer Talk [Official]

Is it possible to change the active bl_category with python? – Blender Stack Exchange

sidebar custom colors for tabs – Blender Stack Exchange

表示形態/場所

リージョン

bl_region_type 表示形態を指定する

  • WINDOW
  • HEADER
  • CHANNELS
  • TEMPORARY
  • UI
  • TOOLS
  • TOOL_PROPS
  • PREVIEW
  • HUD
  • NAVIGATION_BAR
  • EXECUTE
  • FOOTER
  • TOOL_HEADER
スペース

bl_space_type 表示するエディター/場所を指定する

  • VIEW_3D
  • IMAGE_EDITOR
  • NODE_EDITOR
  • SEQUENCE_EDITOR
  • CLIP_EDITOR
  • DOPESHEET_EDITOR
  • GRAPH_EDITOR
  • NLA_EDITOR
  • TEXT_EDITOR
  • CONSOLE
  • INFO
  • TOPBAR
  • STATUSBAR
  • OUTLINER
  • PROPERTIES
  • FILE_BROWSER
  • SPREADSHEET
  • PREFERENCES

ドキュメント:

Panel (bpy.types.Panel) | Blender Python API [Official]

参考:

Creating panels for placing Blender add-ons user interface (UI) | Interplanety

How to change the location of an addon in the UI – Blender Stack Exchange

オペレーターを呼び出す

参考:

Panel 編 | めもてう

How to create panel for setting operator properties? – Blender Artists Community

Storing property in operator, which can be set by UI panel – Blender Artists Community

Display and set internal operator properties from custom Panel UI – Blender Stack Exchange

How display and use operator properties in a UI panel? – Blender Stack Exchange

Why can’t we display operator properties within a Panel? – Blender Developer Forum

オブジェクトのカスタムプロパティを操作する

参考:

How to create a panel with different properties for different objects – Blender Stack Exchange

標準の UI を元にカスタマイズしたい

手順
  1. メニューから「編集 > プリファレンス」 (Edit > Preferences) を選択し、「プリファレンス」ウィンドウを開く。
  2. 「インターフェイス」 (Interface) タブに切り替え、「ディスプレイ」パネルで「開発者用オプション」 (Developer Extras) を有効にする。
  3. UI の要素を右クリックして、「ソースを編集」 (Edit Source) を選択する。
  4. 「Scripting」ワークスペースに切り替えて、テキストエディターでドロップダウンリストから該当するテキストファイルを開いてソースコードを参照する。

参考:

How to draw Blender’s default panel in Operator draw function? – Blender Stack Exchange

サンプル/テンプレート

コード:

templates_py/ui_tool_simple.py – blender/blender – GitHub

templates_py/ui_panel.py – blender/blender – GitHub

ドキュメント

bpy.types.Panel | Blender Python API [Official]

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

コメントを残す

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

Protected by reCAPTCHA