""" 伝票入力フレームワークデモアプリケーション """ import flet as ft import sqlite3 import signal import sys import logging from components.slip_entry_framework import SlipEntryFramework, create_slip_entry_framework class SlipFrameworkDemoApp: """伝票入力フレームワークデモアプリケーション""" def __init__(self, page: ft.Page): self.page = page # ログ設定 logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', handlers=[ logging.FileHandler('app.log'), logging.StreamHandler() ] ) # シグナルハンドラ設定 def signal_handler(signum, frame): print(f"\nシグナル {signum} を受信しました") print("✅ 正常終了処理完了") logging.info("アプリケーション正常終了") sys.exit(0) signal.signal(signal.SIGINT, signal_handler) signal.signal(signal.SIGTERM, signal_handler) # データベース初期化 self._init_database() # ウィンドウ設定 page.title = "伝票入力フレームワークデモ" page.window_width = 1000 page.window_height = 700 page.theme_mode = ft.ThemeMode.LIGHT # ウィンドウクローズイベント page.on_window_close = lambda _: signal_handler(0, None) # 伝票入力フレームワーク作成 self.slip_framework = create_slip_entry_framework(page) # ページ構築 page.add( self.slip_framework.build() ) logging.info("伝票入力フレームワークデモ起動完了") print("🚀 伝票入力フレームワークデモ起動完了") def _init_database(self): """データベース初期化""" try: conn = sqlite3.connect('sales.db') cursor = conn.cursor() # 伝票テーブル作成 cursor.execute(''' CREATE TABLE IF NOT EXISTS slips ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, theme_name TEXT NOT NULL, items_data TEXT NOT NULL, total_amount REAL NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ''') conn.commit() conn.close() logging.info("伝票データベース初期化完了") except Exception as e: logging.error(f"データベース初期化エラー: {e}") def main(page: ft.Page): """メイン関数""" try: app = SlipFrameworkDemoApp(page) except Exception as e: logging.error(f"アプリケーション起動エラー: {e}") if __name__ == "__main__": ft.run(main)