Python, Fletで ポップアップ画面を作成する

記事
IT・テクノロジー
Pythonは、シンプルな記法で、スピーディにコーディングできる 非常に使い勝手が良い言語です。
無料で利用できるライブラリ群は どれも素晴らしく、今まで一生懸命 自力で書いてきた労力が何だったんだろうと疑問に思うほどです (笑)


VB.netなどに比べて、画面の作り込みに少し手間がかかりますが、それでもメリットの方が遥かに大きいと考えます。

私のお気に入りは、「Flet」です。
Tkinter, QTなど、一通りのUI作成ライブラリを試した結果、Fletに落ち着いています。

今日の記事では、Python, fletアプリから簡単に呼び出せるポップアップ画面のサンプルコードを作成しましたので、皆さんに共有します。

```
呼び出し方:
result = dialog.show(
    page=self.page,
    title='Flet Popup Dialog Sample',
    controls=[
        Text('description example'),
    ],
)
print(f'Dialog result is {result}')
```

VB.netのMessageBox.Show()みたく使えます。
以下に、Pythonコードも記載しますので、良かったら試してみてください。


詳しいコード解説は割愛します。是非、コードの中身を読んでみてください。皆さんの中で新たな気付きがあれば、とても嬉しく思います。



```dialog.py
# ポップアップ画面を表示するクラスです。
# dialog.pyとして組込んでください。

import time
from flet import *


class DialogResult:
    yet = 'yet'
    ok = 'ok'
    cancel = 'cancel'


def show(page: Page, title, controls):
    d = Dialog()
    d.show(page, title, controls)
    while d.result == DialogResult.yet:
        time.sleep(0.100)
    result = d.result
    del d

    return True if result == DialogResult.ok else False


class Dialog:
    def __init__(self):
        self.result = DialogResult.yet

    def show(self, page: Page, title, controls):
        content = Column(tight=True)
        # コンテンツ
        for control in controls:
            content.controls.append(control)
        # スペーサ
        content.controls.append(Text('', size=8))
        # ボタン
        content.controls.append(
            Row(
                [
                    ElevatedButton('OK', on_click=self.onOk),
                    ElevatedButton('Cancel', on_click=self.onCancel),
                ],
                alignment=MainAxisAlignment.END,
            )
        )

        self.page = page
        self.dialog = AlertDialog(
            title=Text(title, size=12),
            content=content,
        )
        self.page.dialog = self.dialog
        self.dialog.open = True
        self.page.update()

    def onCancel(self, e):
        self.dialog.open = False
        self.page.update()
        self.result = DialogResult.cancel

    def onOk(self, e):
        self.dialog.open = False
        self.page.update()
        self.result = DialogResult.ok
```


```main.py
# Fletアプリのメインコードのイメージです。
# 今回は、ポップアップ画面を呼び出すための最低限の処理だけ書いています。

import flet as ft
from flet import *
import dialog


class Gui:
    def show_dialog(self, e):
        result = dialog.show(
            page=self.page,
            title='Flet Popup Dialog Sample',
            controls=[
                Text('description example'),
            ],
        )
        print(f'Dialog result is {result}')

    def main(self, page: Page):
        self.page = page
        page.add(
            ElevatedButton(
                text='Show Dialog',
                on_click=self.show_dialog,
            )
        )
        page.window.width = 512
        page.window.height = 320
        page.update()


if __name__ == '__main__':
    gui = Gui()
    ft.app(target=gui.main)
```


最後まで読んでくれてありがとうございます。
次回も、なんか面白そうなネタがあれば投稿します。
お楽しみに。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す ココナラコンテンツマーケット ノウハウ記事・テンプレート・デザイン素材はこちら