mirror of
https://github.com/onyx-and-iris/lottery-tui.git
synced 2026-02-26 11:09:11 +00:00
73 lines
2.2 KiB
Python
73 lines
2.2 KiB
Python
from loguru import logger
|
|
from rich.text import Text
|
|
from textual.app import App, ComposeResult
|
|
from textual.containers import Container
|
|
from textual.widgets import Button, Label, Select, Static
|
|
|
|
from .lottery import request_lottery_obj
|
|
|
|
|
|
class LotteryTUI(App):
|
|
"""A Textual TUI for the Lottery application."""
|
|
|
|
CSS_PATH = 'tui.tcss'
|
|
|
|
def compose(self) -> ComposeResult:
|
|
"""Create child widgets for the app."""
|
|
yield Container(
|
|
Static('Welcome to the Lottery TUI!', id='welcome'),
|
|
Static('Pick a lottery to play:', id='instructions'),
|
|
Select(
|
|
options=[
|
|
('UK Lotto', 'uklotto'),
|
|
('EuroMillions', 'euromillions'),
|
|
('Set For Life', 'setforlife'),
|
|
('Thunderball', 'thunderball'),
|
|
],
|
|
id='lottery-select',
|
|
),
|
|
Button('Draw', id='draw-button'),
|
|
Label('', id='result-label'),
|
|
id='main-container',
|
|
)
|
|
|
|
def on_key(self, event):
|
|
"""Handle key events."""
|
|
if event.key == 'q':
|
|
self.exit()
|
|
|
|
def on_button_pressed(self, event):
|
|
"""Handle button press events."""
|
|
if event.button.id == 'draw-button':
|
|
self._draw_button_handler()
|
|
|
|
def _draw_button_handler(self):
|
|
"""Handle the draw button press."""
|
|
if self.query_one('#lottery-select').is_blank():
|
|
self._update_result_label(
|
|
Text('Please select a lottery before drawing.', style='bold #ff8c42')
|
|
)
|
|
return
|
|
|
|
selected_lottery = self.query_one('#lottery-select').value
|
|
|
|
try:
|
|
lottery_obj = request_lottery_obj(selected_lottery)
|
|
except ValueError:
|
|
ERR_MSG = f'Invalid lottery selection: {selected_lottery}'
|
|
logger.exception(ERR_MSG)
|
|
raise
|
|
|
|
result = lottery_obj.draw()
|
|
self._update_result_label(str(result))
|
|
|
|
def _update_result_label(self, message: str):
|
|
"""Update the result label with a new message."""
|
|
self.query_one('#result-label').update(message)
|
|
|
|
|
|
def main():
|
|
"""Entry point for the Lottery TUI."""
|
|
app = LotteryTUI()
|
|
app.run()
|