File: interactive.py

package info (click to toggle)
python-trame 3.12.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 101,620 kB
  • sloc: python: 13,515; sh: 183; javascript: 93; makefile: 7
file content (54 lines) | stat: -rw-r--r-- 1,158 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
r"""
Installation requirements:
    pip install trame trame-vuetify
"""

from trame.app import get_server
from trame.ui.vuetify import SinglePageLayout
from trame.widgets import html, vuetify

server = get_server(client_type="vue2")
state = server.state

# Initial state values
DEFAULT_VALUE = 5
state.trame_title = "Counter"


# Updates
def increment():
    state.my_number += 1


def decrement():
    state.my_number -= 1


@state.change("my_number")
def validate_my_number(my_number, **kwargs):
    if isinstance(my_number, int):
        # Prevent infinite loop
        return

    try:
        state.my_number = int(my_number)
    except ValueError:
        state.my_number = DEFAULT_VALUE


with SinglePageLayout(server) as layout:
    layout.title.set_text("Simple Counter Demo")

    with layout.toolbar:
        vuetify.VSpacer()
        vuetify.VBtn("-", click=decrement)
        vuetify.VBtn("+", click=increment)

    with layout.content:
        with html.Div(classes="ma-8"):
            vuetify.VTextField(v_model=("my_number", DEFAULT_VALUE))
            vuetify.VSlider(v_model=("my_number",))


if __name__ == "__main__":
    server.start()