Книга: Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода
Диалоговое окно ошибки
Диалоговое окно ошибки
Насколько я знаю, Блендер не имеет элегантных средств уведомления пользователя, что что-то пошло не так. Можно напечатать сообщение в окне терминала или в информационной панели, а затем вызвать исключение. Большинство современных приложений вместо этого открывают окно сообщения и выводят сообщение об ошибке. Следующий скрипт использует API Блендера для создания всплывающего окна диалога для уведомления пользователя.
Скрипт сканирует файл. Если найдено слово return
(возврат), скрипт открывает всплывающее окно, чтобы сообщить пользователю, что произошла ошибка и на какой строке. Если во всём файле такого слова нет, всплывающее окно отображает число отсканированных строк.
На момент написания, этот скрипт был причиной утечек памяти, что делало работу Блендера неустойчивой. Эта ошибка, мы надеемся, будет исправлена в ближайшее время.
#----------------------------------------------------------
# File error.py
# Simple error dialog
#----------------------------------------------------------
import bpy
from bpy.props import *
#
# Оператор сообщения об ошибке. При вызове, всплывает
# диалоговое окно с переданным сообщением.
#
class MessageOperator(bpy.types.Operator):
bl_idname = "error.message"
bl_label = "Message"
type = StringProperty()
message = StringProperty()
def execute(self, context):
self.report({'INFO'}, self.message)
print(self.message)
return {'FINISHED'}
def invoke(self, context, event):
wm = context.window_manager
return wm.invoke_popup(self, width=400, height=200)
def draw(self, context):
self.layout.label("A message has arrived")
row = self.layout.split(0.25)
row.prop(self, "type")
row.prop(self, "message")
row = self.layout.split(0.80)
row.label("") row.operator("error.ok")
#
# Кнопка ОК в диалоге ошибки
#
class OkOperator(bpy.types.Operator):
bl_idname = "error.ok"
bl_label = "OK"
def execute(self, context):
return {'FINISHED'}
#
# Открывает диалог выбора файла и начинает сканирование выбранного файла.
#
class ScanFileOperator(bpy.types.Operator):
bl_idname = "error.scan_file"
bl_label = "Scan file for return"
filepath = bpy.props.StringProperty(subtype="FILE_PATH")
def execute(self, context):
scanFile(self.filepath)
return {'FINISHED'}
def invoke(self, context, event):
context.window_manager.fileselect_add(self)
return {'RUNNING_MODAL'}
#
# Сканирование файлов. Если строка содержит слово "return",
# вызывается диалоговое окно ошибки и производится выход.
# Если достигнут конец файла, отображается другое сообщение.
#
def scanFile(filepath):
fp = open(filepath, "rU")
n = 1
for line in fp:
words = line.split()
if "return" in words:
bpy.ops.error.message('INVOKE_DEFAULT',
type = "Error",
message = 'Found "return" on line %d' % n)
return
n += 1
fp.close()
bpy.ops.error.message('INVOKE_DEFAULT',
type = "Message",
message = "No errors found in %d lines" % n)
return
# Регистрация классов и автоматический запуск сканирования
bpy.utils.register_class(OkOperator)
bpy.utils.register_class(MessageOperator)
bpy.utils.register_class(ScanFileOperator)
bpy.ops.error.scan_file('INVOKE_DEFAULT')
- Панели и кнопки
- Планировка панели и несколько аргументов
- Панель свойств
- Использование свойств сцены для сохранения информации
- Опрос (Polling)
- Динамическое выпадающее меню
- Объявление оператора и добавление его в меню
- Модальный оператор
- Invoke (вызов) против execute (выполнения)
- Всплывающий диалог
- Диалоговое окно ошибки
- Всплывающее окно
- 3.2.4. Ошибки при задавании вопросов
- Ошибки проектирования базы данных
- 6.2. Типичные ошибки при проведении программ продвижения и варианты их устранения
- Работа с окном Add Watch
- Часть четвертая Стратегии защиты от Главной Ошибки
- Файлы без расширения, как правило, текстовые. Как сделать, чтобы при двойном щелчке кнопкой мыши они открывались в Блокн...
- Что такое окно
- Во время загрузки появляется окно с запросом пароля, но раскладка используется русская, а у меня пароль на английском. К...
- Как добавить свою папку в окно открытия документа?
- После переустановки Windows нет доступа к папке Мои документы или нельзя удалить оставшуюся от старой системы папку Docu...
- 4.4. Типичные ошибки распределения прав