Python в обработчиках¶
Приложения Simple UI могут использовать интерпретатор Python для выполнения кода обработчиков в любом режиме. Можно писать код обработчиков используя процедуры, классы, библиотеки. Перечень библиотек и актуальная версия интерпретатора может меняться от релиза к релизу и информация об этом будет обновляться.
На текущий момент используется:
Версия Python - 3.8
Подключены библиотеки:
Стандартные библиотеки
Requests
Lxml
Pandas
BeautifulSoup
pony
Pillow
Jinja2
python-barcode
pymongo
Примечание
Apk по умолчанию не включает поддержку режима x_86 поэтому не будет выполняться в эмуляторе на ПК. Если нужен такой режим – обращайтесь за отдельной версией (изза большого размера не включается в стандартную поставку)
Обработчики Python для экранов «При запуске» и «Обработка ввода» могут выполняться совместно с обработчиками закладки «Offline&Rest» и обработчиками сервиса онлайн (1С) на экранах в последовательности: 1) Python 2) Offline&REST 3) 1С
Кроме того предусмотрены отдельные общие виды обработчиков:
При запуске конфигурации
По расписанию - общий обработчик (периодичность задается в настройках). Запускается в сервисе, работает при неактивном приложении.
По настраиваемому расписанию - обработчики на закладке «Произвольные таймеры». Можно добавить любое количество обработчиков по расписанию с периодичностью от 1 мс.
Обработчик ответа в уведомлении
Обработчик фонового сервиса
При получении контента (поделиться, открыть файл) -* пока не документировано, см. демо
Начиная с с версии 7.00 также появился общий модуль (закладка Общий модуль). Можно разместить там свои функции и потом использовать их через import ui_general
Код можно запускать из кода - синхронно (в UI-потоке) и асинхронно (в фоне). Код надо передавать в виде строк Base64:
RunPy - запускает синхронное выполнение скрипта Python в UI-потоке приложения. В качестве параметра передается скрипт в виде Base64-строки
RunPyThread - запускает асинхронное фоновое выполнение скрипта Python. В качестве параметра передается скрипт в виде Base64-строки
Код обработчиков взаимодействует с данными и интерфейсов Simple UI через:
Переменные (локальные и глобальные переменные, команды в переменных как обычно)
Прямые запросы SQL в СУБД приложения
Все что нужно знать о взаимодействии с переменными, а следовательно и с самим приложением:
Записать в Переменные : hashMap.put(“имя переменной”, значение переменной)
Прочитать из переменных: hashMap.get(“имя переменной”)
Пример кода обработчика на Python:
import json
import requests
r = requests.get('https://www.cbr-xml-daily.ru/daily_json.js')
jdata = json.loads(r.text)
rate =jdata.get("Valute").get("BRL").get("Value")
#Записываем в Переменные
hashMap.put("rate",rate)
Функции, с произвольным числом аргументов¶
Можно использовать функции с произвольным числом неименованных аргуметов (обычно называют args). Для этого надо выбрать в настройке обработчика **pythonargs*
Пример кода такого обработчика:
def foo(hashMap,*args):
param1 = args[0]
param2 = args[1]
param3 = args[2]
return hashMap
Функции платформы, которые работают run-time (модуль android)¶
Все функции доступны через команды-переменные, но часто это не совсем удобно. Например, надо вывести тост внутри долгого обработчика или обновлять уведомление внутри цикла, а не после выполнения такта обработчика (а стек-машина выполняет команды-переменные по окончанию такта). Это именно run-time на уровне системы, т.е. выполняется непосредственно в момент вызова. Все подобные функции собраны в модуль вpython- модуль android и их можно использовать так:
import android
android.toast("hello")
Интерфейсные команды:
toast(String toast) – вывести сообщение Андроид
speak(String text) – произнести текст (TTS engine)
listen() – запустить ожидание распознавания речи
vibrate() и vibrate(int duration) – вибрация и вибрация заданной длительности
beep()/beep(int tone)/ beep(int tone,int beep_duration,int beep_volume) – звуковой сигнал, т.ч. с возможностью выбрать тон (от 1 до 99), продолжительность и громкость (по умолчанию – 100)
- notification(String message)/ notification (String message,String title)/ notification(String message,String title,int number) – уведомление в шторке уведомлений. Number – идентификатор уведомления, по которому к нему можно потом обратиться, чтобы либо убрать, либо перезаписать (обновить)
notification_progress(String message,String title,int number,int progress) – уведомление с прогресс-баром (от 0 до 100) notification_cancel(int number) – скрыть уведомление
Управляющие команды:
refresh_screen() запускает рефреш экрана. Предполагается, что стек будет установлен рантайм методами работы со стеком
refresh_screen(hashMap) - запускает рефреш и передает стек.
RunEvent(String handlers) – запустить массив обработчиков
BackgroundCommand(command) – запустить фоновую команду
stop() или stop(hashMap) – точка останова для отладки
Работа со стеком:
get_process_hashmap() – получает стек переменных экрана из любого места
get_cv_hashmap() – получает стек переменных ActiveCV из любого места
get_service_hashmap() – получает стек переменных фонового сервиса из любого места
process_started() – получает признак, запущен ли процесс в данный момент
cv_started() – получает признак, запущено ли ActiveCV в данный момент
put_process_hashMap(key,value) помещает значение в стек процесса
remove_process_hashMap(key) – удаляет значение из стека процесса