Книга: Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода

Панели и кнопки

Панели и кнопки

Эта программа добавляет пять различных панелей к интерфейсу пользователя в разных местах. Каждая панель имеет имя и кнопку. Для всех кнопок используется один и тот же оператор, но текст на кнопке может быть изменён текстовым аргументом. Когда Вы нажимаете кнопку, Блендер выводит приветствие на терминале.

Оператор кнопки может быть вызван без аргументов, как на первой панели:

self.layout.operator("hello.hello")

Блендер затем будет искать оператор со значением bl_idname, равным hello.hello, и установит его на панели. Текст на кнопке устанавливается по умолчанию в его bl_label, то есть, Say Hello. Класс OBJECT_OT_HelloButton имеет также заказное свойство строкового типа (custom property) с именем country (страна). Оно может быть использовано для передачи аргументов кнопке. Если оператор вызывается без аргумента, свойство country устанавливается по умолчанию в пустую строку.

bl_idname должно быть строкой, содержащей маленькие буквы, цифры и подчеркивания, плюс ровно одна точка; hello.hello удовлетворяет этим критериям. За исключением этого, по-видимому, у bl_idname нет никаких ограничений.

Вид и поведение кнопки по-умолчанию могут быть модифицированы. Давайте вызовем кнопку следующим образом:

self.layout.operator("hello.hello", text='Hej').country = "Sweden"

Текст на этой кнопке - Hej, и значение свойства country является "Sweden" (Швеция). Когда мы нажимаем эту кнопку, Блендер выводит в окне терминала.следующее:

Hello world from Sweden!

В конце файла всё регистрируется с помощью вызова

bpy.utils.register_module(__name__)

Наш вновь определенный оператор кнопки можно теперь использовать как любой другой оператор Блендера. Вот сеанс в консоли Питона Блендера:

>>> bpy.ops.hello.hello(country = "USA")
Hello world from USA!
{'FINISHED'}

Другой путь вызвать наш новый оператор — нажать Пробел. Появится селектор со всеми доступными операторами в позиции курсора мыши. Сократите выбор, набрав подстроку bl_label нашего оператора в поле редактирования. Оператор с параметрами по-умолчанию выполнится, и Hello world! будет выведено в окне терминала.


#----------------------------------------------------------
# File hello.py
#----------------------------------------------------------
import bpy
#
# Меню в районе tools
#
class ToolsPanel(bpy.types.Panel):
    bl_label = "Hello from Tools"
    bl_space_type = "VIEW_3D"
    bl_region_type = "TOOLS" 
    def draw(self, context):
        self.layout.operator("hello.hello")
#
# Меню в районе toolprops
#
class ToolPropsPanel(bpy.types.Panel):
    bl_label = "Hello from Tool props"
    bl_space_type = "VIEW_3D"
    bl_region_type = "TOOL_PROPS" 
    def draw(self, context):
    self.layout.operator("hello.hello", text='Hej').country = "Sweden"
#
# Меню в районе UI
#
class UIPanel(bpy.types.Panel):
    bl_label = "Hello from UI panel"
    bl_space_type = "VIEW_3D"
    bl_region_type = "UI" 
    def draw(self, context):
        self.layout.operator("hello.hello", text='Servus')  
#
# Меню в районе окна Properties, контекст объектов
#
class ObjectPanel(bpy.types.Panel):
    bl_label = "Hello from Object context"
    bl_space_type = "PROPERTIES"
    bl_region_type = "WINDOW" bl_context = "object" 
    def draw(self, context):
self.layout.operator("hello.hello", text='Bonjour').country = "France"  
#
# Меню в районе окна Properties, контекст материалов
#
class MaterialPanel(bpy.types.Panel):
    bl_label = "Hello from Material context"
    bl_space_type = "PROPERTIES"
    bl_region_type = "WINDOW" bl_context = "material" 
    def draw(self, context):
    self.layout.operator("hello.hello", text='Ciao').country = "Italy"  
#
# Кнопка Hello выводит сообщение в консоли
#
class OBJECT_OT_HelloButton(bpy.types.Operator):
    bl_idname = "hello.hello"
    bl_label = "Say Hello"
    country = bpy.props.StringProperty()  
    def execute(self, context):
        if self.country == '':
            print("Hello world!")
        else:
            print("Hello world from %s!" % self.country)
        return{'FINISHED'}  
#
# Регистрация
# Все панели и операторы должны быть зарегистрированы в Блендере; в противном
# случае они не появятся. Самый простой путь зарегистрировать всё в файле -
# с помощью вызова bpy.utils.register_module(__name__).

bpy.utils.register_module(__name__)

Оглавление книги


Генерация: 0.536. Запросов К БД/Cache: 2 / 0
поделиться
Вверх Вниз