Быстрое меню - TrueCat17/Ren-Engine GitHub Wiki
Быстрое меню находится снизу диалогового окна и содержит часто используемые кнопки:
Переменная quick_menu
отвечает за включение (True
, по умолчанию) или отключение (False
) этого меню.
Об изменении свойств кнопок (размеры, изображения, шрифт и т. д.) читайте в статье Интерфейс (gui).
Вы можете добавить свою кнопку в быстрое меню.
Списком (list
) кнопок является quick_menu_screen.items
.
Добавление своей кнопки:
quick_menu_screen.items.append(['Screenshot', make_screenshot])
Добавляемый объект является массивом со следующими элементами:
- Строка с названием кнопки (автоматически будет применена система перевода);
- Функция, которая будет вызвана при нажатии на кнопку;
- Необязательный аргумент - вызываемый объект (
callable
- например, функция), возвращающийTrue
(если кнопку нужно показать) илиFalse
(если нет).
Т. к. quick_menu_screen.items
является простым массивом, то доступны все его методы.
Вот более сложный пример:
my_score = 0
def my_secret_func():
# remove button from list
i = 0
while i < len(quick_menu_screen.items):
if quick_menu_screen.items[i][0] == 'Something':
quick_menu_screen.items.pop(i)
break
i += 1
notification.out('Something')
quick_menu_screen.items.insert(1, ['Something', my_secret_func, Eval('my_score > 10')])
Здесь кнопка "вставляется" (insert
) так, что после этого занимает место 1
(отчёт идёт с 0
).
Также стоит обратить внимание на условие отображения: значение переменной my_score
должно быть больше 10.
Для упрощения проверки рекомендуется ввести (или скопипастить) в консоль (Shift+O
) код my_score = 11
.
Ну и перед удалением производится поиск элемента.
Почему бы просто не вызвать quick_menu_screen.items.pop(1)
, ведь именно в индекс 1
мы его и добавляли?
Специально для случая, когда после этого кода что-то могло вставить ещё одну кнопку перед нашей.
"Вызов" экземпляра класса Eval
возвращает то, что вернул бы код, который был передан ему при создании.
Пример:
my_var = 5
def my_func(a):
return a * 2
e = Eval('my_var * my_func(2) + 3')
answer1 = e() # 23
def instead_eval():
return my_var * my_func(2) + 3
answer2 = instead_eval() # 23
Перевод выполняется довольно просто (это код верхнего уровня - не в блоках init
, label
и т. д.):
translate russian strings:
old 'Screenshot'
new 'Скриншот'
old 'Something'
new 'Что-то'
Подробнее читайте в статье Система переводов.