diff options
author | AndreeaRadoescu <randreea23@gmail.com> | 2024-10-10 23:40:47 +0200 |
---|---|---|
committer | AndreeaRadoescu <randreea23@gmail.com> | 2024-10-10 23:40:47 +0200 |
commit | 29d891f67252382d976a025d5c42488161d08f0f (patch) | |
tree | 7895d2cc78bf95eb257cd8b06f36f7141c1c010d /gui-project | |
parent | 8dd549b560ec3b7b1ef0fa7a64f421ad4ab28a93 (diff) |
added simple GUI that displays cards with front and back, and has buttons for showing back and for selecting whether one got the card correctly or not
Diffstat (limited to 'gui-project')
-rw-r--r-- | gui-project/cards.py | 83 | ||||
-rw-r--r-- | gui-project/main.py | 26 |
2 files changed, 109 insertions, 0 deletions
diff --git a/gui-project/cards.py b/gui-project/cards.py new file mode 100644 index 0000000..f175aa1 --- /dev/null +++ b/gui-project/cards.py @@ -0,0 +1,83 @@ +import asyncio + +from nicegui import ui + +class CardComponent(): + def __init__(self, front : str, back : str): + if front is None or front == "": + raise Exception("Cannot have empty front on the card") + + if back is None or back == "": + raise Exception("Cannot have empty back on the card") + + self.front = front + self.back = back + + def get_front(self): + return self.front + + def get_back(self): + return self.back + + +class CardUI(): + def __init__(self, parent_ui, card : CardComponent): + self.parent_ui = parent_ui + self.card = card + self.is_resolved = asyncio.Event() + self.init_card() + + def init_card(self): + with self.parent_ui: + self.row_parent = ui.row() + self.init_front() + self.init_back() + + def init_front(self): + with self.row_parent: + ui.colors(frontc='#bcdbc6') + with ui.card().classes('bg-frontc') as self.front: + ui.markdown("**Front**") + ui.separator() + ui.markdown(self.card.get_front()) + ui.button("Revert", on_click=lambda: self.revert_card()) + self.front.set_visibility(False) + + def init_back(self): + with self.row_parent: + ui.colors(back="#c4bcdb") + with ui.card().classes('bg-back') as self.back: + ui.markdown("_Back_") + ui.separator() + ui.markdown(self.card.get_back()) + with ui.button_group(): + ui.button("Got it", on_click=lambda: self.user_clicked_correct()) + ui.button("Ain't got it", on_click=lambda: self.user_clicked_incorrect()) + self.back.set_visibility(False) + + + def show_front(self): + self.back.set_visibility(False) + self.front.set_visibility(True) + + def show_back(self): + self.front.set_visibility(False) + self.back.set_visibility(True) + + def revert_card(self): + ui.notify("Showing back") + self.show_back() + + def user_clicked_correct(self): + ui.notify("You got this") + self.is_resolved.set() + + def user_clicked_incorrect(self): + ui.notify("Keep at it!") + self.is_resolved.set() + + async def is_answered(self): + await self.is_resolved.wait() + + def hide_card(self): + self.row_parent.delete() diff --git a/gui-project/main.py b/gui-project/main.py new file mode 100644 index 0000000..7e52c77 --- /dev/null +++ b/gui-project/main.py @@ -0,0 +1,26 @@ +from nicegui import ui +from cards import CardUI, CardComponent +from flashcards import Session, SCHEDULERS + +@ui.page("/") +def main_page(): + with ui.row() as main_row: + start_button = ui.button("Start", on_click=lambda: start_session(main_row, start_button)) + + +async def start_session(parent_ui, start_button): + ui.notify("Started session") + session = Session("brutal", ["/home/andreear/git/schwiizertuutsch/flashcards/diverse.fcard"], "/home/andreear/git/flashcards/state.txt") + + start_button.set_visibility(False) + for i, card in enumerate(session.practice(20)): + # print(f"Showing card id {i}") + # print(f"Card front {card.front}") + # print(f"Card back {card.back}") + card_component = CardComponent(card.front, card.back) + card_ui = CardUI(parent_ui, card_component) + card_ui.show_front() + await card_ui.is_answered() + card_ui.hide_card() + +ui.run(port=3011)
\ No newline at end of file |