Я хотел бы использовать ipysheets и ipywidgets для создания пользовательского интерфейса, аналогичного веб-, используя voila в блокноте jupyter.
Это очень мощный инструмент для очень быстрого создания пользовательских интерфейсов для быстрого взаимодействия с пользователем без необходимости прибегнуть к веб-страницам, то есть к серверам, django, веб-фреймам и т. п.
Я пытаюсь связать ячейки двух ipysheets, один для входных данных и другой для выходных данных. Содержимое выходной таблицы данных должно обновляться на лету каждый раз, когда происходит изменение входных данных (в данном случае, например, путем установки флажков).
from ipysheet import *
import ipywidgets as widgets
import ipysheet
import pandas as pd
# example dataframe with check boxes, (including booleans)
DF_input = pd.DataFrame(data={'a':[False,False,False],'b':[False,False,False]})
sheet_input = ipysheet.sheet(from_dataframe(DF_input))
# Output dataframe has as many columns as input dataframe but only one row
DF_m = pd.DataFrame(data={'m1':['non'],'m2':['non']})
sheet_m = ipysheet.sheet(from_dataframe(DF_m))
# I try here to pass the cells of the current ipysheet to cell_m1 and cell_m2
cell_m1 = ipysheet.cell(0, 1)
cell_m2 = ipysheet.cell(0, 2)
I would like that this function runs every time there is a change in the Input sheet.
def calculate(change):
mydf = to_dataframe(sheet_input)
cell_m1.value = mydf.loc[:,'a'].any()
cell_m2.value = mydf.loc[:,'b'].any()
# I want that the cells of the second sheet observe the changes.
# I want to call the function calculate everytime there is a change
cell_m1.observe(calculate, 'value')
cell_m2.observe(calculate, 'value')
widgets.VBox([sheet_input,sheet_m])
Это результат:
![enter image description here](https://i.stack.imgur.com/dZ45o.png)
При попытке установить флажки происходят странные вещи:
![enter image description here](https://i.stack.imgur.com/GIX8X.png)
В конечном итоге я хочу связать ячейки второго sheet_m со значениями первого sheet_input. Функция calc должна получить всю таблицу sheet_input, выполнить некоторые вычисления и заполнить значения в sheet_m.
Что я сделал: я много раз читал документацию ipysheets и, прежде всего, функцию наблюдения. https://readthedocs.org/projects/ipysheet/downloads/pdf/latest/
Немного помощи было бы неплохо.