PythonでGUIを作ってみました

レイ
2023-07-31
2023-07-31

python-logo-master-v3-TM-flattenedお疲れ様です。おれちゃんでござる!

前回と同様、開発に関する記事をまた書こうと思っていました。今回はJavascriptのコードでウェブサイトを作ることではなく、Pythonスクリプトのことお話ししたいと思っています。

最近納品書を自動的に書くPythonスクリプトを完成したのですが、まだコマンドラインのスクリプトのままなので、どうやってもっと使いやすくできるのかというのを考えっていました。

コマンドプロンプトより使いやすいウインドウのほうがいいかなと鑑みてたので初めてPythonでGUIを挿入挑戦しました。

tk の Python GUI ライブラリ

PythonのスクリプトにGUIを使いたかったら一番人気なライブラリはTkということです。ウインドウの関係ならなんでもできます。

私の場合では結構単純なウインドウとフィールドだけを挿入したいので、Tkはばっちりです。

先ず新しいTkオブジェクトを初期化子することで始まります

こうしたら新しいwindowというTkオブジェクトが作られて、タイトルとサイズも決められる。小さいツールの形が欲しいので小さいウインドウにしました。

次はグリッドを設定します。グリッドはエクセルのようにウインドウの中を行と列にすることです。こうするとウインドウの中のフィールドは位置しやすくなります。

最後のwindows.resizable(False, False)はウインドウのサイズを固定する場合です。フィールドに入力する内容はいつも同じサイズなのでウインドウを固定したら無難となります。

GridでLabelやボタンなどの位置

このグリッドをうまく使ってLabelを位置します。Labelはただテキストが表示するところです。こうすると次の入力できるところを説明できます。ユーザーが内容を入れるものはEntryということです。

上記の画像を見るとAccess Keyというテキスト「行0列0」の隣にあるaccess_keyというEntryがあります「行0列1」。

同じ様にその下にSecret Keyというフィールドがあります。
padxとpadyのパラメーターは行ごとにがぎゅうっとくついてないように少しスペースを入れるためです。

Entryで作られる変数で入力されてる内容をスクリプトに使用できます。

以上のget()で入力された内容は変数に保管します。

ユーザーが入力データはこれでゲットします。次はスクリプト発動ボタンを作りましょう!

実は簡単ですよ。グリッドは前のラベルの使い方と一緒です。ボタンの特徴はtextでボタンの中のテキストを決めるとcommandでスクリプトにある関数を発動できます。

プログレスバー

スクリプトの進捗を見るためのプログレスバーをこれから加わりたいと思っています。

先ずはプログレスバーそのものをウインドウに追加しましょう

以上のコードでは二つの部分があります。プログレスバーそのものと、中にあるラベルです。こうするとプログレスバーの中に進捗だけではなく、今どのスクリプトを発動しているのも記入できます。

スクリプトの中心であるrun_command関数にプログレスバーのラベルを更新します。

又はプログレスそのものを表示したいする場合は以下になります。

発動するスクリプトの数を比率にしてバーの長さの部分として表示します。

スクリプトが発動中の時フィールドの入力を制限することもできます。

以上のコードにすると入力するフィールドは灰色になってて何も入力することができなくなります。

スクリプトが終わったらフィールドとプログレスバーの進捗度を元に戻します。

結果

結果は以下になります。

変数記入して、発動するとプログレスバーは以下になります。

フィールドとボタンが灰色になってて進捗も表示されます。

最後に

Pythonは使ったらことあるんだけどいつもスクリプトのままですからこのようなGUIを使うなんて初めてでした。

ウインドウの中にフィールドを位置するのはそこそこ難しかったけどやはり適切なUIをみると満足ですよね。スクリプトよりバリバリのプログラムを書いてるって感じがします。

また次お楽しみにしてね ^^💦