Pythonで簡単にアプリケーションを開発しょう!

Flet Python

🐍Pythonで開発した物を表現するには?

自分もそうですが、Pythonで学習したプログラムを見せる方法としては、WEBアプリケーションとして作成する、又はGUIアプリケーションとして作成する方法などがあります。

WEBアプリケーションとしては、DjangoFlaskのフレームワークを使用するのが多いかと。

GUIアプリケーションに関しては、tkinterが情報が多いですね。

2023年1月にFletと呼ばれるGUIもWEBも作成できるフレームワークがでました。

少し前から気になっていたので、今回しっかり調べてみようと思います!

🔰Fletとは?

フロントエンドの経験がなくても、好きな開発言語 ※1 でWeb、モバイル、デスクトップのアプリケーションを作成できるフレームワークです。

※1:2023年03月時点ではPythonのみ(今後GoやC#も予定されているとの事)

The fastest way to build Flutter apps in Python | Flet
Build internal web apps quickly in the language you already know.
https://flet.dev/

📄ドキュメントもサンプルパターンが多く掲載されており、非常にわかりやすいです。

🖥開発環境の準備

Python 3.7 以降が必要

モジュールをインストールします。

pip install flet
flet インストール前
flet インストール前
flet インストール後
flet インストール後

当方の開発環境

種類バージョン
OSWindows 10 Home 22H2
64ビット メモリ16GB
Python 3.11.1
flet0..4.2

🐍最小のプログラム実行

公式ページに記載あるプログラムを動かしてみます。

Creating Flet apps in Python | Flet
Learn how to build Flet apps in Python.
https://flet.dev/docs/guides/python/getting-started#basic-app-structure
import flet as ft


def main(page: ft.Page):
    # add/update controls on Page
    pass


ft.app(target=main)

ローディングがぐるぐるまわっているWindowが表示されました。

GUIアプリケーション
GUIアプリケーション

📡WEBアプリケーションとして実行

ft.app に対してview を追加すればよいとの事。

さきほどのネイティブOS用アプリケーションをWEBブラウザで表示しています。

ft.app(target=main, view=ft.WEB_BROWSER)
import flet as ft


def main(page: ft.Page):
    # add/update controls on Page
    pass


ft.app(target=main, view=ft.WEB_BROWSER)

自動的にブラウザが起動して表示されました。

アドレスは 127.0.0.1:5439 でしたが、ポート番号はランダムなようです。

WEBアプリケーション
WEBアプリケーション

ポートを指定してWEBアプリケーションを実行

ft.app(target=main, port=25710, view=ft.WEB_BROWSER)
import flet as ft


def main(page: ft.Page):
    # add/update controls on Page
    pass


ft.app(target=main, port=25710, view=ft.WEB_BROWSER)

指定したポートで表示されました。

⚙コントロールを表示する

fletではユーザーインターフェイスの パーツの呼び方は コントロール

コントロールを表示するにはPage又は他のコントロールに追加するか、他のコントロール内に追加する。

Pageは最上位のコントロール。

コントロール=各パーツという認識で良いかと。

~表示までの流れ~

① ページのcontrolsにコントロール追加する。「page.controls.append(★コントロール★)」

② ページにコントロールをマウントする。「page.update()」

サンプルプログラム

import flet as ft


def main(page: ft.Page):
    t = ft.Text(value="Hello, world!", color="green") # コントロール作成
    page.controls.append(t) # controlsにコントロールを追加する
    page.update() # ページにコントロールをマウントする


# ft.app(target=main, port=25710, view=ft.WEB_BROWSER)
ft.app(target=main, port=25710)

①②の両方を実行してくれるショートカット

page.add(★コントロール★)

page.controls.append(★コントロール★) → page.update()

コントロールを表示する別のやり方

空のコントロールを先に作成しておき、最終描画前に内容をセットする方法。

import time

import flet as ft


def main(page: ft.Page):
    t = ft.Text() # 空のコントロールを作成
    page.add(t) # ページのcontrolsにコントロール追加する → ページにコントロールをマウントする

    # この時点で空のコントロールが描画されている

    for i in range(10):
        t.value = f"Step {i}" # コントロールのテキストを上書き
        page.update() # ページにコントロールをマウントする
        time.sleep(1) # 1秒待機


# ft.app(target=main, port=25710, view=ft.WEB_BROWSER)
ft.app(target=main, port=25710)
Step 0 ~ 9 までカウントアップしていく
Step 0 ~ 9 までカウントアップしていく

ここまででfletの基本となる部分は出来るようになったかと思います。
後は各コントロールの使い方イベントの処理の仕方がわかれば、簡単に立派なアプリケーションが作成できます。

それぞれに関しては別記事で細かく書いていきたいと思います。

各コントロールの使い方

画面関連の設定方法

Fletの【画面】に関する設定方法
Fletの【画面】周りに関する設定方法を記載しています。タイトル、横幅、高さ、リサイズ禁止、「最小化」ボタン無効化などを項目ごとにコード付き
https://outpust.jp/blog/ee542716-d5a5-4929-ac91-f0d866d602bb#45a4fa81-cf93-48d4-a173-02d48895ef10
プロフィール背景画像 プロフィール画像
名前:田中寛之
今まで約20年間、出版社、マスコミ、化粧品会社、システム会社・病院・クリニックにてシステムエンジニアとして勤務。現在、個人事業主「ONLINE-WORLD」として活動し、42歳からPythonを始めました!
プロフィール背景画像 プロフィール画像
名前:田中寛之
今まで約20年間、出版社、マスコミ、化粧品会社、システム会社・病院・クリニックにてシステムエンジニアとして勤務。現在、個人事業主「ONLINE-WORLD」として活動し、42歳からPythonを始めました!