Книга: Введение в написание скриптов на Питоне для Блендера 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__)
- Панели и кнопки
- Планировка панели и несколько аргументов
- Панель свойств
- Использование свойств сцены для сохранения информации
- Опрос (Polling)
- Динамическое выпадающее меню
- Объявление оператора и добавление его в меню
- Модальный оператор
- Invoke (вызов) против execute (выполнения)
- Всплывающий диалог
- Диалоговое окно ошибки
- Почему я не нахожу в Панели управления описанных пунктов?
- Как разместить значки возле кнопки Пуск?
- На Панели быстрого запуска возле кнопки меню Пуск вмещается всего три значка. Как увеличить ее емкость?
- Кнопки на панели инструментов или меню
- Рис. 204. Самые необходимые кнопки панели инструментов.
- Часы в Windows показывают неправильное время
- 4.2. Создание трехмерной модели и построение горизонтальной проекции детали
- Чистка системного реестра
- Неисправности корпуса
- Как запустить программу?
- Как перейти от одной выполняющейся программы к другой?
- Что такое Проводник?