...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
Выходными данными служат объекты классов DataFrame и Filter. В свою очередь класс DataFrame имеет структуру:
class DataFrame: |
А структура класса Filter выглядит так:
class Filter: |
Задача разработчика создать объект на основе одного из этих классов. Сделать пометку (оставить комментарий сверху в формате #-Мой объект-), чтобы отображалось в поле выбора переменных.
Пример – Данные для гистограммы
#-Гистограмма- myChart = DataFrame() # Создаем объект myChart.cols = [['2015 год'], ['2016 год']] # Заполняем столбцы myChart.rows = [['Янв'], ['Фев'], ['Мар'], ['Апр'], ['Май'], ['Июн'], ['Июл'], ['Авг'], ['Сен'], ['Окт'], ['Ноя'], ['Дек']] # Заполняем строки myChart.values = [[1, 23, 313, 631, 23, 113, 513, 931, 0, 421, 63, 90], [12, 233, 33, 31, 144, 93, 13, 6, 13, 283, 13, 63]] # Заполняем данные (массив массивов (столбцы строки)) |
Результат:
...
...
Для виджета «Фильтр» необходимо использовать класс Filter. Объект фильтра необходимо создавать только в том случае, если ранее он не был создан, чтобы выбранное значение не сбрасывалось.
Пример:
if not 'myFilter' in locals():
#-Фильтр-
myFilter = Filter() # Создаем объект
myFilter.rows = [['Проект 1'], ['Проект 2'], ['Проект 3']] # Заполняем данные
myFilter.selected = [['Проект 2']] #Пример с несколькими выбранными значениями: [['Проект 1'], ['Проект 2']]
У пользователя есть возможность подключать сторонние библиотеки, для этого необходимо положить *.py-библиотеку в папку со скриптами на сервере Ubuntu, по умолчанию это /srv/py-script. И подключить её в скрипте стандартным способом, например, через import.
Результат: