📖

初めてPython×PySimpleGUIで爆速で動くものを作ってみた(日本語)

2023/06/23に公開

はじめに

こんばんは。
私の住む地域は最低気温が一桁になり、インフルが流行り始めたので、
いつ子供達が体調崩すかドキドキしながら過ごしているケニーです。

今回は初めてやってみた系で息抜きアウトプットします。
気軽に流し読みして頂ければ幸いです。

なお、現在オーストラリアに住んでいる関係で、周りはもちろん英語の環境です。
英語にも触れる時間を増やす為に、以下にて英語版の本記事をアウトプットしようと思います。
https://medium.com/@kennyEngineer/python-pysimplegui-making-simple-app-in-10min-a1191dfe0908

早速ですが、みなさん、通称:クソアプリは好きですか?
私は好きです。笑
(最近はまったオススメ:2022年に作ったクソアプリまとめ)

今回は、とりあえず触ってみたかったPythonを使って、超簡単なクソアプリを作ってみようと思います。
私自身はPython自体初めて触れるので、基礎しか触れない内容となっておりますので、ご承知おきください。

では本題へ

上司や先輩と飲みにいった時の会計時のやり取りって社会人になると必ず経験しますよね。
そんな時にさくっと使える、割り勘クソアプリです。
(※でも本当にクソアプリなので、実際は使い物になりません。笑)

環境構築

1)Pythonをインストールします。
  https://www.python.org/downloads/
 詳細のインストール方法はこちら
2)作業用ディレクトリを作成
  任意の場所に作業用ディレクトリを作り、
 そのディレクトリ直下にPythonの実行ファイルを作成します。
 今回は以下のようにしました。

 +-- python_practice1
 |     +-- sample.py

3)PySimpleGUIをインストールします。
  これは、2018年より開発されているデスクトップアプリを作るためのライブラリ。
 学習のコストが思ったより低く、とりあえずPython触ってみるか。の時にちょうど良い。
 尚且つ、とりあえず動くものを。。。を超短期間で求められた際に使えるかも?
2)で作成したディレクトリにて、以下コマンドでインストールします。

pip install PySimpleGUI

とりあえず、これで環境はできました。

実装

こんなイメージで作ってみます。
見た目の課題はありそうですが、今回は爆速で作るので我慢です。

では、実装してみます。

sample.py
import PySimpleGUI as sg
sg.theme("TanBlue")

layout = [[sg.T("総額と人数を入力してね。")],
          [sg.T("総額"),sg.I("", k="in1")],
          [sg.T("人数"),sg.I("", k="in2")],
          [sg.B(" 実行 ", k="btn"), sg.T(k="txt")]]
win = sg.Window("ちゃんと割り勘しましょうね", layout,
                font=(None,16), size=(700,200))

def execute():
    in1 = int(v["in1"])
    in2 = int(v["in2"])
    txt = f"1人、{in1 / in2 :.2f}円です。"
    txt = f"上司が{in1 / 2}円で、他の方は、{in1 / 2 / (in2-1)}円です。ゴチです!"
    win["txt"].update(txt)

while True:
    e, v = win.read()
    if e == "btn":
      execute()
    if e == None:
        break
win.close()

解説します。

import PySimpleGUI as sg
sg.theme("TanBlue")

インポートするときはsgをつける事が推奨されているようです。
また、themeはここを参考にさせていただき、適当に選んでみました。

layout = [[sg.T("総額と人数を入力してね。")],
          [sg.T("総額"),sg.I("", k="in1")],
          [sg.T("人数"),sg.I("", k="in2")],
          [sg.B(" 実行 ", k="btn"), sg.T(k="txt")]]

レイアウトです。
実際に画面で表示させるものを配置も一緒に実装します。

win = sg.Window("ちゃんと割り勘しましょうね", layout,
                font=(None,16), size=(700,200))

引数にタイトルの文字列と、上記のレイアウトを渡します。
また、上記のとおり、フォントやサイズも設定できます。

def execute():
    in1 = int(v["in1"])
    in2 = int(v["in2"])
    txt = f"1人、{in1 / in2 :.2f}円です。"
    txt = f"上司が{in1 / 2}円で、他の方は、{in1 / 2 / (in2-1)}円です。ゴチです!"
    win["txt"].update(txt)

while True:
    e, v = win.read()
    if e == "btn":
      execute()
    if e == None:
        break
win.close()

ここがロジック部分になります。
e, v = win.read()
win.read()が、window.read()で、画面が表示され、入力待ちの状態になります。
また、
eがeventで、ユーザーが押したボタンの名前
vがvalueで、入力された値
が入ります。
executeされると、上記のdef execute()が機能する流れです。

実行

ターミナルで、python sample.pyを実行してみます。

このような画面が出てくるので、総額、人数を入れて実行をクリックします。


はい。こんな感じで結果が表示されます。
大丈夫です、上司は酔ってて気が大きくなっているので、
細かいことは気にせず払ってくれるはずです。

終わりに

今後Pythonを使う機会が出てくるかもしれないので、とりあえず触ってみたというのが今回です。
PySimpleGUIでめちゃくちゃ簡単にレイアウト作れたので、
「とりあえず動くもの」を爆速で作る時とか、重宝するかも・・?と思いました。
(デザインの好き嫌いはかなり分かれそう。。)

コラボスタイル Developers

Discussion