1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# See https://anywidget.dev/ import anywidget import traitlets from pathlib import Path class CounterWidget(anywidget.AnyWidget): _esm = Path("counter.js") _css= Path("counter.css") value = traitlets.Int(0).tag(sync=True) counter = CounterWidget() counter.value = 42 counter # assign the widget to render to page, so solara knows what to render page = counter
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function render({ model, el }) { let button = document.createElement("button"); button.innerHTML = `count is ${model.get("value")}`; button.addEventListener("click", () => { model.set("value", model.get("value") + 1); model.save_changes(); }); model.on("change:value", () => { button.innerHTML = `count is ${model.get("value")}`; }); el.classList.add("counter-widget"); el.appendChild(button); } export default { render };
1
2
.counter-widget button { color: white; font-size: 1.75rem; background-color: #ea580c; padding: 0.5rem 1rem; border: none; border-radius: 0.25rem; } .counter-widget button:hover { background-color: #9a3412; }