今回は、Pythonに標準装備のTkinterというGUIを用いて前々回作成したようなプログレスモジュールを作っていきます。
最初はkivyを用いてやりたいなと思ったのですが、
kivyはPCのビデオカードがOpenGL2.0に対応していないと使えないという仕様なので、
かなり古いパソコンだと実行できません。
めっちゃ使いたいくらい綺麗なグラフィックなので惜しいです。
でも、kivyだと開発情報がやや少ないように思うので、誰でもできるオーソドックスなTkinterを使った方がいいのではないかと思います。
なので早速、作成していきましょう!
プロジェクト
前回の「Python | 1. 汎用プログラム」で作成した「CodeAnalyzer」というプロジェクト内で作業します。
モジュールの追加は、その中の「pgming-package」になります。
ソースコード
下の画像のように追加してください。
以下がソースです。
.pyのダウンロードはセキュリティ的にアウトなのでコピーでお願いします。
最初、Tkinterを触ったときにかなりややこしいなと感じたところが多々あったのですが、
試行錯誤してやっとここまでの形にできました。
基本的には前々回の記事「Python | 2. コンソール用プログレスモジュール」をGUI用に改良したようなものですが、
というか全く別物になっていますね。
まず、GUIアプリケーションクラスを経由してGUIプログレスレシーバーを起動。
処理ターゲットクラスの中がメイン処理となって、その中のフラグのON・OFFでそれと同期したGUIプログレスが開始したり終了したりします。
基本的にはスレッド管理なので上手くいっています。
また、プログレスラベルでラベル表示したり、矢印ジェネレータによる変化ラベルを用いて進捗を表現したり、
とけっこう盛り込んでみました。
そして、これが難しかったのですが、GUIでのプログレスバーの表示です。
同期と非同期という処理に時間がかかってしまいましたが、デーモンスレッドという処理を施せれば何とかできました。
デバッグ実行
では、実行してみましょう!
fwmodule_gui_progress.pyが画面上に出ていることを確認して、「F5」キーを押します。
すると以下のようにGUIが起動し、ヘビのアスキーアートが出てくるので「開始」ボタンを押せば処理が開始します。
以下のように「変換」ボタンを押せば、動いている処理内で操作が可能です。
printで出力もしていますので以下のように処理の流れが確認できるかと思います。
「終了」ボタンを押せば以下のように処理がストップします。
また、「×」でGUIを強制的に閉じればデーモンスレッドで全てのサブスレッドを破棄してくれるので安心です。
GUIを閉じた後、次に進捗バーがあるGUIが以下のように表示されるかと思います。
「開始」ボタンで開始すれば処理が走ります。確定的処理なので右まで満たすまで止まりません。
リセットすれば進捗バーが初期化されて最初に戻ります。
これもデーモンスレッドで行っているので強制終了してもエラーになったりしません。
以上がTkinterにおけるプログレス処理です。
ちょっとしたツールを作るときなんかに手ごろに使えるのでぜひ使ってみて下さい。
お疲れさまでした。