Quellcode durchsuchen

fix awaitable dialog for Python <=3.9 by creating asyncio.Event on correct event loop

Falko Schindler vor 2 Jahren
Ursprung
Commit
98ce1fd258
1 geänderte Dateien mit 12 neuen und 6 gelöschten Zeilen
  1. 12 6
      nicegui/elements/dialog.py

+ 12 - 6
nicegui/elements/dialog.py

@@ -1,5 +1,5 @@
 import asyncio
-from typing import Any
+from typing import Any, Optional
 
 from .mixins.value_element import ValueElement
 
@@ -17,7 +17,13 @@ class Dialog(ValueElement):
         """
         super().__init__(tag='q-dialog', value=value, on_value_change=None)
         self._result: Any = None
-        self._submitted = asyncio.Event()
+        self._submitted: Optional[asyncio.Event] = None
+
+    @property
+    def submitted(self) -> asyncio.Event:
+        if self._submitted is None:
+            self._submitted = asyncio.Event()
+        return self._submitted
 
     def open(self) -> None:
         self.value = True
@@ -27,19 +33,19 @@ class Dialog(ValueElement):
 
     def __await__(self):
         self._result = None
-        self._submitted.clear()
+        self.submitted.clear()
         self.open()
-        yield from self._submitted.wait().__await__()
+        yield from self.submitted.wait().__await__()
         result = self._result
         self.close()
         return result
 
     def submit(self, result: Any) -> None:
         self._result = result
-        self._submitted.set()
+        self.submitted.set()
 
     def on_value_change(self, value: Any) -> None:
         super().on_value_change(value)
         if not self.value:
             self._result = None
-            self._submitted.set()
+            self.submitted.set()