Flet機能と操作方法一覧

機能操作方法
Fletのインストールコマンドプロンプトまたはターミナルで pip install flet を実行して、Fletモジュールをインストールします。
アプリの初期設定import flet でFletをインポートし、メイン関数を定義します。flet.app(target=main) または flet.app(target=main, view=flet.WEB_BROWSER) でアプリを起動します。main(page) 関数内でページ設定を行います。
ページの基本設定page.title でページのタイトルを設定し、page.update() でページを更新します。page.window_widthpage.window_height でウィンドウサイズを指定できます。
ウィジェットの追加page.add(ウィジェット) でページにウィジェットを追加します。複数のウィジェットを一度に追加する場合は、page.add(ウィジェット1, ウィジェット2) のようにカンマで区切ります。
コンテナの作成Container(content=ウィジェット, width=値, height=値, bgcolor="色") でコンテナを作成します。スタイルや配置は paddingmarginalignment で調整します。
スタックウィジェットの使用Stack(controls=[ウィジェットリスト]) でウィジェットを重ねて配置します。alignment パラメータでスタック内のウィジェットの配置を指定します。
行(Row)と列(Column)の使用Row(controls=[ウィジェットリスト], alignment='spaceBetween')Column(controls=[ウィジェットリスト], alignment='center') でウィジェットを横方向または縦方向に配置します。spacing でウィジェット間の間隔を調整できます。
テキストの追加Text("表示するテキスト", size=フォントサイズ, weight='bold') でテキストを表示します。色は color="色"、スタイルは italic=True などで設定します。
ボタンの追加ElevatedButton(text="ボタン名", on_click=関数名)IconButton(icon=icons.アイコン名, on_click=関数名) を使用します。ボタンのスタイルは style=ButtonStyle() でカスタマイズ可能です。
画像の追加Image(src="画像のパス", width=値, height=値) を使用して画像を表示します。fit パラメータで画像の表示方法(例:fit="contain")を指定できます。
パディングとマージンの設定Container(padding=値, margin=値) で内側と外側の余白を設定します。EdgeInsets.all(値)EdgeInsets.only(left=値, top=値) で個別に指定可能です。
カスタムチェックボックスの作成独自のチェックボックスクラスを定義し、Checkbox(value=True, label="ラベル") などを使用します。スタイルや動作はクラス内でカスタマイズします。
ルーティングの実装page.go("/route") を使用して画面遷移を行います。def on_route_change(e): 関数を定義し、page.on_route_change = on_route_change で設定します。ルートごとに表示するビューを制御します。
アニメーションの追加ウィジェットに animate=animation.Animation(duration=500, curve="easeIn") を追加します。特定のプロパティに対しては animate_opacityanimate_position などを使用します。
イベントハンドラの設定ウィジェットの on_clickon_changeon_hover パラメータに関数を割り当て、ユーザーの操作に応答します。関数内で e オブジェクトを使ってイベント情報を取得できます。
色やスタイルの設定ウィジェットの bgcolorborder_radiusborder などのパラメータで見た目を変更します。Gradient を使ってグラデーションを設定することも可能です。
レスポンシブデザインの実装ResponsiveRow()ResponsiveColumn() を使用し、画面サイズに応じたレイアウトを構築します。MediaQuery を使って画面情報を取得し、条件分岐でレイアウトを変更します。
データのループ表示リストや辞書型データをループで処理し、各アイテムに対してウィジェットを生成し、controls リストに追加します。例:for item in items: controls.append(Text(item))
カスタムウィジェットの作成新しいクラスを定義して Control クラスを継承し、build(self) メソッド内でウィジェットを返します。再利用可能なコンポーネントを作成できます。
アプリの再起動と更新コード変更後にアプリを再起動するか、page.update() を呼び出してUIを更新します。データバインディングを活用して、変更を自動的に反映させることも可能です。
レイアウトの調整alignmentspacingrun_spacing パラメータでウィジェットの配置や間隔を調整します。MainAxisAlignmentCrossAxisAlignment でより詳細な配置設定ができます。
入力フォームの作成TextField(label="ラベル", on_change=関数名) でテキスト入力欄を作成します。password=True でパスワード入力に対応します。
ウィジェットの可視性制御visible パラメータや Container(visibility=bool値) でウィジェットの表示・非表示を切り替えます。条件式を使って動的に制御可能です。
スクロールの設定Column(scroll="auto")ListView() を使用して、コンテンツのスクロールを有効にします。縦方向・横方向のスクロールも指定できます。
ウィジェットの配置alignment パラメータでウィジェットの配置位置を指定します。例:alignment.centeralignment.top_leftalignment.bottom_right
背景画像の設定Container(background_image=ft.Image(src="画像のパス")) で背景画像を設定します。fit パラメータで画像の表示方法を指定できます。
フォントのカスタマイズテキストウィジェットで font_family="フォント名"font_size=値font_weight="bold" などを使用してフォントを変更します。
アイコンの使用from flet import icons をインポートし、Icon(icons.アイコン名) でアイコンを表示します。アイコンリストはFletのドキュメントで確認できます。
状態管理グローバル変数や setattr()getattr() を使用してアプリ内の状態を管理します。page.sessionpage.client_storage でセッションデータを扱うこともできます。
ダイアログの表示dialog = AlertDialog(title=Text("タイトル"), content=Text("内容")) を作成し、page.dialog = dialogdialog.open = True で表示します。
データバインディングウィジェットの値を変数にバインドし、値の変更時に自動でUIを更新します。例:textfield.bind("value", my_variable)
ファイルアップロードとダウンロードFilePicker() を使用してファイル選択ダイアログを表示します。on_result で選択結果を取得し、File オブジェクトとして扱います。
ネットワークリクエストPythonの標準ライブラリや requests モジュールを使用して、APIからデータを取得し、UIに反映させます。非同期処理には asyncio を活用します。
フォームのバリデーション入力ウィジェットの on_bluron_change イベントで入力値を検証し、エラーメッセージを表示します。validators パラメータで事前定義のバリデータを使用することも可能です。
リストビューの作成ListView(controls=[ウィジェットリスト]) でスクロール可能なリストを作成します。大量のデータを表示する場合は仮想化を検討します。
テーマの変更page.themepage.dark_theme を設定し、アプリ全体のテーマを変更します。カスタムテーマを作成して適用することもできます。
ドラッグ&ドロップウィジェットに draggable=True を設定し、on_drag_starton_drag_updateon_drag_end でドラッグ操作を制御します。ドロップ先では on_drop イベントを処理します。
グラフの描画PlotlyChart() ウィジェットを使用して、Plotlyで作成したインタラクティブなグラフを表示します。データの可視化に役立ちます。
リアルタイム通信page.pubsub を使用して、異なるページやウィジェット間でメッセージを送受信します。WebSocketを利用したリアルタイム通信も可能です。
デバッグとロギングprint() 文でコンソールに出力したり、logging モジュールを使用してログを記録します。page.debug = True でデバッグモードを有効にします。
アプリのデプロイFletアプリはデスクトップ、ウェブ、モバイルで動作します。ウェブアプリとしてデプロイする場合は、flet publish コマンドを使用してクラウドに公開します。
モジュールの分割大規模なアプリケーションでは、コードを複数のモジュールやファイルに分割し、import 文で読み込みます。再利用性と可読性が向上します。
アプリの国際化(i18n)テキストを外部ファイルに分離し、ユーザーのロケールに応じて適切な言語リソースを読み込むことで、多言語対応を実現します。
アクセシビリティ対応ウィジェットにラベルを設定し、スクリーンリーダーでの読み上げをサポートします。色のコントラストやフォーカスインジケータも考慮します。
ユニットテストの実装Pythonの標準ライブラリ unittestpytest を使用して、アプリケーションのユニットテストを作成し、品質を保証します。
キーボードショートカットの追加page.on_key_down イベントでキー入力を監視し、特定のキーやキーの組み合わせに応じて動作を実行します。
タイマーとスケジューリングasynciothreading.Timer を使用して、一定時間後や一定間隔で処理を実行します。リアルタイムな更新や定期的なデータ取得に利用します。
セキュリティ対策ユーザー入力の検証や、機密情報の適切な管理を行います。HTTPS通信の利用や、認証・認可の実装も重要です。
エラーハンドリングtry-except ブロックで例外をキャッチし、ユーザーに適切なエラーメッセージを表示します。予期しないエラーのログも記録します。
環境変数の使用os.environ を使用して、APIキーやデータベース接続情報などの環境変数を扱います。コード内に機密情報をハードコーディングしないようにします。
データベースとの連携sqlite3SQLAlchemyPeewee などのORMを使用して、データベースと連携します。非同期処理には databases モジュールが便利です。
外部APIの利用requestsaiohttp を使用して外部のAPIと通信し、データを取得・送信します。レスポンスデータを解析し、アプリに反映します。
非同期処理の実装async def で非同期関数を定義し、await を使用して非同期処理を実行します。大量のI/O操作や待機時間のある処理で有効です。
マルチスレッド・マルチプロセスthreadingmultiprocessing モジュールを使用して、並列処理を実現します。UIの応答性を維持しながら重い処理を行う際に活用します。
通知機能の追加page.show_snack_bar(SnackBar(content=Text("メッセージ"))) でスナックバーを表示します。AlertDialog を使用してダイアログで通知することも可能です。

これらの操作方法を組み合わせることで、Fletを使ったモダンで機能豊富なアプリケーションを構築できます。FletはFlutterに似た宣言的なUI構築が可能であり、Pythonのシンプルさと強力なライブラリを活用できます。

決められた時間に自動実行させる

cronは、定期的に実行したいものや時間を指定して何かを実行したいときに使用する。cronの設定ファイルは crontab -e で編集できます。次のような書式で実行するタイミングとコマンドを設定します。

分 時 日 月 曜日 コマンド
* * * * * some_command

例えば、毎日6時30分にディスクの容量がどれだけ使用されているか知りたいときには次のように記入します。

30 6 * * * df -h

毎分30分おきにコードを自動実行するには、cronの設定ファイルで次のように記入します。

*/30 * * * * /path/to/command

上記の例では、/path/to/command というコマンドが毎時0分と30分に実行されます。

ラズパイでpythonコードを常に実行させておく

supervisorでプログラムをデーモン化

supervisorの使い方

  • まず、ラズベリーパイにsupervisorをインストールします。ターミナルで以下のコマンドを実行してください。
sudo apt-get install supervisor
  • 次に、プログラムをデーモン化するための設定ファイルを作成します。設定ファイルは/etc/supervisor/conf.d/ディレクトリに置きます。例えば、test.pyというプログラムをデーモン化する場合は、test.confという名前で設定ファイルを作成します。
  • 設定ファイルには、以下のような内容を記述します。
[program:test]
command=python3 /home/pi/test.py
user=pi
autostart=true
autorestart=true
stderr_logfile=/var/log/test.err.log
stdout_logfile=/var/log/test.out.log
  • ここで、各項目の意味は以下のとおりです。
  • [program:test]:プログラムの名前です。任意で構いませんが、設定ファイル名と一致させるとわかりやすいです。
  • command=python3 /home/pi/test.py:プログラムを実行するコマンドです。プログラムのパスは絶対パスで指定してください。
  • user=pi:プログラムを実行するユーザーです。通常はpiで構いませんが、必要に応じて変更してください。
  • autostart=true:起動時にプログラムを自動的に実行するかどうかです。trueにすると自動的に実行されます。
  • autorestart=true:プログラムが異常終了した場合に自動的に再起動するかどうかです。trueにすると自動的に再起動されます。
  • stderr_logfile=/var/log/test.err.log:エラーログファイルのパスです。任意で構いませんが、書き込み権限がある場所に指定してください。
  • stdout_logfile=/var/log/test.out.log:標準出力ログファイルのパスです。任意で構いませんが、書き込み権限がある場所に指定してください。
  • 設定ファイルを保存したら、supervisorを再起動して設定を反映させます。ターミナルで以下のコマンドを実行してください。
sudo service supervisor restart
  • これで、プログラムがデーモン化されました。supervisorctlコマンドでプログラムの状態や操作ができます²³。

pythonからスプレッドシートを操作する

1,GCPでプロジェクト作成

2,google drive APIを有効にする

3,google sheetsAPIを有効にする

4,認証情報設定>サービスアカウントキーを選択

5,サービスアカウントキーを設定 アカウント名設定>役割>プロジェクト>編集者を選択>キータイプはJSONを選択>作成

6,JSON秘密鍵をダウンロード後clientEmailをスプレッドシートの共有ユーザに追加

7,googlecolaboratory起動>プロジェクト作成

8,googledriveをマウント

9,ダウンロードした秘密鍵をアップロード

10,pythonコード記述

import gspread

from oauth2client.service_account import ServiceAccountCredentials

import json

SP_CREDENTIAL_FILE = “ここにアップロードした秘密鍵のパスを記載”

SP_COPE = [

    “https://www.googleapis.com/auth/drive”,

    “https://spreadsheets.google.com/feeds”

]

SP_SHEET_KEY = “ここにスプレッドシートのIDを入力”

SP_SHEET = “共有するシート名入力”

credentials =ServiceAccountCredentials.from_json_keyfile_name(SP_CREDENTIAL_FILE,SP_COPE)

gc = gspread.authorize(credentials)

#スプレッドシートの選択

sh = gc.open_by_key(SP_SHEET_KEY)

#シートの選択

worksheet = sh.worksheet(SP_SHEET)

#シートの値をすべて取得

worksheet.get_all_values()

#特定のセルから値を取得

sheet.row_values(1)

sheet.col_values(1)

sheet.cell(1, 1).value

#特定のセルを変更

sheet.update_cell(1, 1, “I just wrote to a spreadsheet using Python!”)