1
0
Christoph Trappe 3 жил өмнө
parent
commit
24d00a78c9

+ 7 - 0
main.py

@@ -430,4 +430,11 @@ with example(ui.keyboard):
     ui.label('Key events can be caught globally by using the keyboard element.')
     ui.checkbox('Track key events').bind_value_to(keyboard, 'active')
 
+with example(ui.open):
+    with ui.page('/yet_another_page') as other:
+        ui.label('Welcome to yet another page')
+        ui.link('Back to main page', '/')
+
+    ui.button('BUTTON', on_click=lambda e: ui.open('/yet_another_page', e))
+
 ui.run(port=8080)

+ 13 - 9
nicegui/elements/open.py

@@ -6,19 +6,23 @@ class OpenView(CustomView):
 
     def __init__(self):
         super().__init__('open', __file__)
-        self.initialize()
 
 class Open(Element):
 
-    def __init__(self, path: str, event_arguments=None):
+    def __init__(self):
+        """
+        Open Element
+
+        Adds a global element to programmatically trigger redirects for a specific client.
+        """
         super().__init__(OpenView())
-        if event_arguments:
-            self.push(path, event_arguments)
+        self.view.initialize()
 
-    async def push_async(self, line: str, event_arguments):
+    async def redirect_async(self, path: str, event_arguments):
         websocket = event_arguments.event.get('websocket')
-        await self.view.run_method(f'redirect("{line}")', websocket)
-        print('button was pressed. origin ' + str(websocket), flush=True)
+        await self.view.run_method(f'redirect("{path}")', websocket)
+
+    def redirect(self, path: str = None, event_arguments=None):
+        asyncio.get_event_loop().create_task(self.redirect_async(path, event_arguments))
 
-    def push(self, line: str, e):
-        asyncio.get_event_loop().create_task(self.push_async(line, e))
+    __call__ = redirect

+ 3 - 0
nicegui/nicegui.py

@@ -38,4 +38,7 @@ ui = Ui()
 
 page = ui.page('/')
 page.__enter__()
+
+ui.open = ui.open()
+
 jp.justpy(lambda: page, start_server=False)