瀏覽代碼

integrate element visibility

Falko Schindler 2 年之前
父節點
當前提交
89c3cfc751
共有 2 個文件被更改,包括 18 次插入8 次删除
  1. 11 1
      nicegui/element.py
  2. 7 7
      nicegui/elements/binding_mixins.py

+ 11 - 1
nicegui/element.py

@@ -3,12 +3,13 @@ from abc import ABC
 from typing import Callable, Dict, List, Optional
 
 from . import globals
+from .elements.binding_mixins import BindVisibilityMixin
 from .event_listener import EventListener
 from .slot import Slot
 from .task_logger import create_task
 
 
-class Element(ABC):
+class Element(ABC, BindVisibilityMixin):
 
     def __init__(self, tag: str) -> None:
         self.client = globals.client_stack[-1]
@@ -22,11 +23,20 @@ class Element(ABC):
         self._text: str = ''
         self.slots: Dict[str, Slot] = {}
         self.default_slot = self.add_slot('default')
+        self.visible = True
 
         self.client.elements[self.id] = self
         if self.client.slot_stack:
             self.client.slot_stack[-1].children.append(self)
 
+    def on_visibility_change(self, visible: str) -> None:
+        if visible and 'hidden' in self._classes:
+            self._classes.remove('hidden')
+            self.update()
+        if not visible and 'hidden' not in self._classes:
+            self._classes.append('hidden')
+            self.update()
+
     def add_slot(self, name: str) -> Slot:
         self.slots[name] = Slot(self, name)
         return self.slots[name]

+ 7 - 7
nicegui/elements/binding_mixins.py

@@ -85,30 +85,30 @@ class BindVisibilityMixin:
     """
     Mixin providing bind methods for attribute visible.
     """
-    visibility = BindableProperty(on_change=lambda sender, visibility: sender.on_visibility_change(visibility))
+    visible = BindableProperty(on_change=lambda sender, visible: sender.on_visibility_change(visible))
 
-    def bind_visibility_to(self, target_object: Any, target_name: str = 'visibility', forward: Callable = lambda x: x):
+    def bind_visibility_to(self, target_object: Any, target_name: str = 'visible', forward: Callable = lambda x: x):
         bind_to(self, 'visible', target_object, target_name, forward)
         return self
 
-    def bind_visibility_from(self, target_object: Any, target_name: str = 'visibility',
+    def bind_visibility_from(self, target_object: Any, target_name: str = 'visible',
                              backward: Callable = lambda x: x, *, value: Any = None):
         if value is not None:
             def backward(x): return x == value
         bind_from(self, 'visible', target_object, target_name, backward)
         return self
 
-    def bind_visibility(self, target_object: Any, target_name: str = 'visibility', *,
+    def bind_visibility(self, target_object: Any, target_name: str = 'visible', *,
                         forward: Callable = lambda x: x, backward: Callable = lambda x: x, value: Any = None):
         if value is not None:
             def backward(x): return x == value
         bind(self, 'visible', target_object, target_name, forward=forward, backward=backward)
         return self
 
-    def set_visibility(self, visibility: str) -> None:
-        self.visibility = visibility
+    def set_visibility(self, visible: str) -> None:
+        self.visible = visible
 
-    def on_visibility_change(self, visibility: str) -> None:
+    def on_visibility_change(self, visible: str) -> None:
         pass