diff --git a/lightweight_charts/table.py b/lightweight_charts/table.py index 9d23c71..b360b39 100644 --- a/lightweight_charts/table.py +++ b/lightweight_charts/table.py @@ -1,3 +1,4 @@ +import asyncio import random from typing import Union @@ -69,10 +70,19 @@ class Table(Pane, dict): self._formatters = {} self.headings = headings self.is_shown = True - if return_clicked_cells: - self.win.handlers[self.id] = lambda rId, cId: func(self[rId], cId) - else: - self.win.handlers[self.id] = lambda rId: func(self[rId]) + def wrapper(rId, cId=None): + if return_clicked_cells: + func(self[rId], cId) + else: + func(self[rId]) + + async def async_wrapper(rId, cId=None): + if return_clicked_cells: + await func(self[rId], cId) + else: + await func(self[rId]) + + self.win.handlers[self.id] = async_wrapper if asyncio.iscoroutinefunction(func) else wrapper self.return_clicked_cells = return_clicked_cells headings = list(headings) diff --git a/lightweight_charts/topbar.py b/lightweight_charts/topbar.py index 1611e08..4f884dc 100644 --- a/lightweight_charts/topbar.py +++ b/lightweight_charts/topbar.py @@ -49,10 +49,20 @@ class SwitcherWidget(Widget): class MenuWidget(Widget): def __init__(self, topbar, options, default, separator, align, func): super().__init__(topbar, value=default, func=func) + self.options = list(options) self.run_script(f''' {self.id} = {topbar.id}.makeMenu({list(options)}, "{default}", {jbool(separator)}, "{self.id}", "{align}") ''') + def set(self, option): + if option not in self.options: + raise ValueError(f"Option {option} not in menu options ({self.options})") + self.value = option + self.run_script(f''' + {self.id}.updateMenu("{option}") + ''') + self.win.handlers[self.id](option) + class ButtonWidget(Widget): def __init__(self, topbar, button, separator, align, func):