我想使用ipysheets和ipywidgets在jupyter笔记本中使用voila生成类似Web的用户界面。
这是一个非常强大的工具,可以非常快速地创建用户界面以实现快速的用户交互,而不必诉诸于网页,即服务器,Django,Web框架等。
我正在尝试链接两个ipysheet的单元格,一个用于输入数据,另一个用于输出数据。 每当输入数据发生更改时,输出数据表的内容应立即进行更新(在这种情况下,例如,通过单击复选框)。
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])
这是结果:
尝试单击复选框时,会发生奇怪的事情:
我最终要做的是将第二个sheet_m的单元格链接到第一个sheet_input的值。函数compute必须获取sheet_input的所有表进行一些计算并在sheet_m中填写值。
我做了什么: 我多次阅读ipysheets的文档,最重要的是观察功能。 https://readthedocs.org/projects/ipysheet/downloads/pdf/latest/
一些帮助会很好。