Falko Schindler 2 лет назад
Родитель
Сommit
5893ae5685
5 измененных файлов с 17 добавлено и 7 удалено
  1. 7 3
      nicegui/client.py
  2. 2 1
      nicegui/globals.py
  3. 3 1
      nicegui/page.py
  4. 2 0
      nicegui/run.py
  5. 3 2
      nicegui/templates/index.html

+ 7 - 3
nicegui/client.py

@@ -17,7 +17,10 @@ TEMPLATE = (Path(__file__).parent / 'templates' / 'index.html').read_text()
 
 
 class Client:
 class Client:
 
 
-    def __init__(self, dark: Optional[bool] = ...) -> None:
+    def __init__(self,
+                 title: Optional[str] = None,
+                 dark: Optional[bool] = ...,
+                 ) -> None:
         self.id = globals.next_client_id
         self.id = globals.next_client_id
         globals.next_client_id += 1
         globals.next_client_id += 1
         globals.clients[self.id] = self
         globals.clients[self.id] = self
@@ -36,6 +39,7 @@ class Client:
 
 
         self.head_html = ''
         self.head_html = ''
         self.body_html = ''
         self.body_html = ''
+        self.title = title
         self.dark = dark
         self.dark = dark
 
 
     @property
     @property
@@ -54,7 +58,6 @@ class Client:
     def build_response(self) -> HTMLResponse:
     def build_response(self) -> HTMLResponse:
         vue_html, vue_styles, vue_scripts = vue.generate_vue_content()
         vue_html, vue_styles, vue_scripts = vue.generate_vue_content()
         elements = json.dumps({id: element.to_dict() for id, element in self.elements.items()})
         elements = json.dumps({id: element.to_dict() for id, element in self.elements.items()})
-        dark = self.dark if self.dark is not ... else globals.dark
         return HTMLResponse(
         return HTMLResponse(
             TEMPLATE
             TEMPLATE
             .replace(r'{{ client_id }}', str(self.id))
             .replace(r'{{ client_id }}', str(self.id))
@@ -64,7 +67,8 @@ class Client:
             .replace(r'{{ body_html | safe }}', f'{self.body_html}\n{vue_html}\n{vue_styles}')
             .replace(r'{{ body_html | safe }}', f'{self.body_html}\n{vue_html}\n{vue_styles}')
             .replace(r'{{ vue_scripts | safe }}', vue_scripts)
             .replace(r'{{ vue_scripts | safe }}', vue_scripts)
             .replace(r'{{ js_imports | safe }}', vue.generate_js_imports())
             .replace(r'{{ js_imports | safe }}', vue.generate_js_imports())
-            .replace(r'{{ dark }}', '"auto"' if dark is None else str(dark))
+            .replace(r'{{ title }}', self.title if self.title is not None else globals.title)
+            .replace(r'{{ dark }}', str(self.dark if self.dark is not ... else globals.dark))
         )
         )
 
 
     async def handshake(self, timeout: float = 3.0, check_interval: float = 0.1) -> None:
     async def handshake(self, timeout: float = 3.0, check_interval: float = 0.1) -> None:

+ 2 - 1
nicegui/globals.py

@@ -25,7 +25,8 @@ state: State = State.STOPPED
 
 
 host: str
 host: str
 port: int
 port: int
-dark: Optional[bool] = False
+title: str
+dark: Optional[bool]
 binding_refresh_interval: float
 binding_refresh_interval: float
 
 
 client_stack: List['Client'] = []
 client_stack: List['Client'] = []

+ 3 - 1
nicegui/page.py

@@ -14,6 +14,7 @@ class page:
 
 
     def __init__(self,
     def __init__(self,
                  path: str, *,
                  path: str, *,
+                 title: Optional[str] = None,
                  dark: Optional[bool] = ...,
                  dark: Optional[bool] = ...,
                  response_timeout: float = 3.0,
                  response_timeout: float = 3.0,
                  ) -> None:
                  ) -> None:
@@ -26,6 +27,7 @@ class page:
         :param response_timeout: maximum time for the decorated function to build the page (default: 3.0)
         :param response_timeout: maximum time for the decorated function to build the page (default: 3.0)
         """
         """
         self.path = path
         self.path = path
+        self.title = title
         self.dark = dark
         self.dark = dark
         self.response_timeout = response_timeout
         self.response_timeout = response_timeout
 
 
@@ -35,7 +37,7 @@ class page:
     def __call__(self, func: Callable) -> Callable:
     def __call__(self, func: Callable) -> Callable:
         async def decorated(*dec_args, **dec_kwargs) -> Response:
         async def decorated(*dec_args, **dec_kwargs) -> Response:
             try:
             try:
-                with Client(dark=self.dark) as client:
+                with Client(title=self.title, dark=self.dark) as client:
                     if any(p.name == 'client' for p in inspect.signature(func).parameters.values()):
                     if any(p.name == 'client' for p in inspect.signature(func).parameters.values()):
                         dec_kwargs['client'] = client
                         dec_kwargs['client'] = client
                     result = func(*dec_args, **dec_kwargs)
                     result = func(*dec_args, **dec_kwargs)

+ 2 - 0
nicegui/run.py

@@ -10,12 +10,14 @@ from . import globals
 def run(*,
 def run(*,
         host: str = '0.0.0.0',
         host: str = '0.0.0.0',
         port: int = 5000,
         port: int = 5000,
+        title: str = 'NiceGUI',
         dark: Optional[bool] = False,
         dark: Optional[bool] = False,
         reload: bool = True,
         reload: bool = True,
         binding_refresh_interval: float = 0.1,
         binding_refresh_interval: float = 0.1,
         ) -> None:
         ) -> None:
     globals.host = host
     globals.host = host
     globals.port = port
     globals.port = port
+    globals.title = title
     globals.dark = dark
     globals.dark = dark
     globals.binding_refresh_interval = binding_refresh_interval
     globals.binding_refresh_interval = binding_refresh_interval
 
 

+ 3 - 2
nicegui/templates/index.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <!DOCTYPE html>
 <html>
 <html>
   <head>
   <head>
-    <title>NiceGUI</title>
+    <title>{{ title }}</title>
     <script src="/static/socket.io.min.js"></script>
     <script src="/static/socket.io.min.js"></script>
     <link href="/static/fonts.css" rel="stylesheet" type="text/css" />
     <link href="/static/fonts.css" rel="stylesheet" type="text/css" />
     <link href="/static/quasar.prod.css" rel="stylesheet" type="text/css" />
     <link href="/static/quasar.prod.css" rel="stylesheet" type="text/css" />
@@ -84,7 +84,8 @@
       {{ vue_scripts | safe }}
       {{ vue_scripts | safe }}
       {{ js_imports | safe }}
       {{ js_imports | safe }}
 
 
-      Quasar.Dark.set({{ dark }});
+      const dark = {{ dark }};
+      Quasar.Dark.set(dark === None ? "auto": dark);
 
 
       app.mount("#app");
       app.mount("#app");
     </script>
     </script>