Răsfoiți Sursa

experiment with one class per element type

Falko Schindler 4 ani în urmă
părinte
comite
a0660e2e05

+ 9 - 0
spike_classes/elements/button.py

@@ -0,0 +1,9 @@
+import justpy as jp
+from .element import Element
+
+class Button(Element):
+
+    def __init__(self, text: str):
+
+        view = jp.QButton(text=text)
+        super().__init__(view)

+ 20 - 0
spike_classes/elements/element.py

@@ -0,0 +1,20 @@
+import justpy as jp
+
+class Element:
+
+    wp: None
+    view_stack = []
+
+    def __init__(self, view: jp.HTMLBaseComponent):
+
+        self.view_stack[-1].add(view)
+        view.add_page(self.wp)
+        self.view = view
+
+    def __enter__(self):
+
+        self.view_stack.append(self.view)
+
+    def __exit__(self, *_):
+
+        self.view_stack.pop()

+ 9 - 0
spike_classes/elements/label.py

@@ -0,0 +1,9 @@
+import justpy as jp
+from .element import Element
+
+class Label(Element):
+
+    def __init__(self, text: str):
+
+        view = jp.Div(text=text)
+        super().__init__(view)

+ 5 - 0
spike_classes/main.py

@@ -0,0 +1,5 @@
+#!/usr/bin/env python3
+from nice_gui import ui
+
+ui.label('Hello world!')
+ui.button('Click me')

+ 22 - 0
spike_classes/nice_gui.py

@@ -0,0 +1,22 @@
+#!/usr/bin/env python3
+import justpy as jp
+import uvicorn
+import sys
+import inspect
+from ui import Ui
+from elements.element import Element
+
+if not inspect.stack()[-2].filename.endswith('spawn.py'):
+    uvicorn.run('nice_gui:ui', host='0.0.0.0', port=80, lifespan='on', reload=True)
+    sys.exit()
+
+wp = jp.QuasarPage(delete_flag=False, head_html='<script>confirm = () => true;</script>')
+
+main = jp.Div(a=wp, classes='q-ma-md column items-start', style='row-gap: 1em')
+main.add_page(wp)
+jp.justpy(lambda: wp, start_server=False)
+
+Element.view_stack = [main]
+Element.wp = wp
+
+ui = Ui()

+ 17 - 0
spike_classes/ui.py

@@ -0,0 +1,17 @@
+import justpy as jp
+from starlette.applications import Starlette
+
+class Ui(Starlette):
+
+    from elements.label import Label as label
+    from elements.button import Button as button
+
+    def __init__(self):
+        # NOTE: we enhance our own ui object with all capabilities of jp.app
+        self.__dict__.update(jp.app.__dict__)
+
+        self.tasks = []
+
+        @self.on_event('startup')
+        def startup():
+            [jp.run_task(t) for t in self.tasks]

+ 0 - 0
debug_timer/main.py → spike_reload/main.py


+ 0 - 0
debug_timer/nice_gui.py → spike_reload/nice_gui.py


+ 0 - 0
debug_timer/test.py → spike_reload/test.py