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)
```
最後まで読んでくれてありがとうございます。
次回も、なんか面白そうなネタがあれば投稿します。
お楽しみに。