add some silly examples, working with panel rx values
This commit is contained in:
parent
58c98b0119
commit
2a36919958
1 changed files with 53 additions and 1 deletions
54
sample.py
54
sample.py
|
|
@ -1,5 +1,7 @@
|
||||||
import json
|
import json
|
||||||
import panel
|
import panel
|
||||||
|
from random import randint
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
from watt42_viewlib import attach_w42_state
|
from watt42_viewlib import attach_w42_state
|
||||||
|
|
||||||
|
|
@ -10,8 +12,58 @@ state_as_text = panel.bind(lambda s: f"W42 State:\n\n```\n{json.dumps(s, indent=
|
||||||
|
|
||||||
state_pane = panel.pane.Markdown(state_as_text, sizing_mode='stretch_width')
|
state_pane = panel.pane.Markdown(state_as_text, sizing_mode='stretch_width')
|
||||||
|
|
||||||
|
value = w42_state.rx.value
|
||||||
|
|
||||||
|
multiplier = panel.widgets.IntSlider(name='Multiplier', start=1, end=10, step=1, value=1)
|
||||||
|
|
||||||
|
def value_display(state: dict[str, Any], multiplier: int) -> str:
|
||||||
|
if state and 'value' in state:
|
||||||
|
return f"Current W42 State Value times multiplier: {state['value'] * multiplier}"
|
||||||
|
return "Current W42 State Value: N/A"
|
||||||
|
|
||||||
|
def value_or_zero(state: dict[str, Any]) -> int:
|
||||||
|
if state and 'value' in state:
|
||||||
|
return state['value']
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def array_from_value(x: int) -> list[int]:
|
||||||
|
return [x * randint(1, 20) for _ in range(25)]
|
||||||
|
|
||||||
|
def times2(x: int) -> int:
|
||||||
|
return x * 2
|
||||||
|
|
||||||
|
times2_rx = panel.rx(times2)(panel.rx(value_or_zero)(w42_state))
|
||||||
|
|
||||||
|
markdown_rx = panel.rx(lambda v: f"## Value times 2 is: {v}, array={array_from_value(v)}")(times2_rx)
|
||||||
|
|
||||||
|
array_rx = panel.rx(array_from_value)(panel.rx(value_or_zero)(w42_state))
|
||||||
|
|
||||||
|
echart_bar_rx = panel.pane.ECharts(
|
||||||
|
panel.rx(lambda arr: {
|
||||||
|
'xAxis': {
|
||||||
|
'type': 'category',
|
||||||
|
'data': [f'Item {i+1}' for i in range(len(arr))]
|
||||||
|
},
|
||||||
|
'yAxis': {
|
||||||
|
'type': 'value'
|
||||||
|
},
|
||||||
|
'series': [{
|
||||||
|
'data': arr,
|
||||||
|
'type': 'bar'
|
||||||
|
}]
|
||||||
|
})(array_rx),
|
||||||
|
sizing_mode='stretch_width',
|
||||||
|
height=400
|
||||||
|
)
|
||||||
|
|
||||||
_ = panel.template.FastListTemplate(
|
_ = panel.template.FastListTemplate(
|
||||||
title="Sample W42 View App",
|
title="Sample W42 View App",
|
||||||
sidebar=[panel.pane.Markdown("This is a sample sidebar.")],
|
sidebar=[panel.pane.Markdown("This is a sample sidebar.")],
|
||||||
main=[panel.pane.Markdown("# Welcome to the Main Content Area"), state_pane],
|
main=[
|
||||||
|
panel.pane.Markdown("# Welcome to the Main Content Area"),
|
||||||
|
echart_bar_rx,
|
||||||
|
# state_pane, panel.pane.Markdown(f"Current W42 State Value: {value}"),
|
||||||
|
panel.ReactiveExpr(panel.rx(value_display)(w42_state, multiplier), widget_location='top'),
|
||||||
|
panel.pane.Markdown(markdown_rx),
|
||||||
|
],
|
||||||
).servable()
|
).servable()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue