サイドバーパネル

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)

参考:

Blender 2.8 の Python 実行で UI パネルを追加する | MR が楽しい

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

Panel 編 | めもてう

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

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)

参考:

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

UILayout.enabled | Blender Python API [Official]

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 None
Code language: Python (python)

コード:

Blender で選択されているオブジェクトがメッシュで名前が 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

参考:

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

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

How to change the location of an addon in the UI – 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