h-1.flet.3/app_framework_demo.py

114 lines
3.7 KiB
Python

"""
テキストエディタフレームワークデモ
再利用可能なコンポーネントの使用例
"""
import flet as ft
import sqlite3
import signal
import sys
import logging
from components.text_editor import TextEditor, create_draft_editor, create_memo_editor, create_note_editor
def main(page: ft.Page):
"""メイン関数"""
try:
# ログ設定
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)
# データベース初期化
conn = sqlite3.connect('sales.db')
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS text_storage (
id INTEGER PRIMARY KEY AUTOINCREMENT,
category TEXT NOT NULL,
title TEXT NOT NULL,
content TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
''')
conn.commit()
conn.close()
logging.info("データベース初期化完了")
# ウィンドウ設定
page.title = "テキストエディタフレームワークデモ"
page.window_width = 800
page.window_height = 600
page.theme_mode = ft.ThemeMode.LIGHT
# ウィンドウクローズイベント
page.on_window_close = lambda _: signal_handler(0, None)
# ナビゲーション設定
current_editor = [0]
editors = []
# エディタ作成
draft_editor = create_draft_editor(page)
memo_editor = create_memo_editor(page)
note_editor = create_note_editor(page)
editors = [draft_editor, memo_editor, note_editor]
# タブ切り替え
tabs = ft.Tabs(
selected_index=0,
tabs=[
ft.Tab(
text="下書き",
content=draft_editor.build()
),
ft.Tab(
text="メモ",
content=memo_editor.build()
),
ft.Tab(
text="ノート",
content=note_editor.build()
)
],
expand=True
)
# ページ構築
page.add(
ft.Column([
ft.Text("テキストエディタフレームワーク", size=24, weight=ft.FontWeight.BOLD),
ft.Text("再利用可能なコンポーネントのデモ", size=16, color=ft.Colors.GREY_600),
ft.Divider(),
tabs
], expand=True, spacing=10)
)
logging.info("テキストエディタフレームワーク起動完了")
print("🚀 テキストエディタフレームワーク起動完了")
except Exception as e:
logging.error(f"アプリケーション起動エラー: {e}")
print(f"❌ アプリケーション起動エラー: {e}")
if __name__ == "__main__":
import flet as ft
ft.run(main)