前回記事は以下
作ってみたウィジェット
ウィジェットは、
上側:選択データ表示 and 入力エリア
下側:データ表示エリア
で、下側のデータ表示エリアでデータ表示し、それをマウスでクリックすると上側のエリアに表示され、それをユーザーが(自分)書き換えたりして、データベースへ登録する・・・ってな感じ。
使用モジュールはざっくり言うと、Tkinterで表示、データ保持はsqlite3で。
◆ざっくり概要
・データは以下の7カラム
ID
名前
サナギになった日
羽化予想日、羽化した日
羽化に要した日数
羽化に必要日数
・DBのテーブル作成、削除が可能。
・新規登録、選択した情報の修正が可能。
・登録したDB情報は、CSV出力可能。逆にCSVファイルを読み込み可能。
・登録したDB情報は、表イメージ(jpg)にして出力可能
いろいろ書いたけど、苦労した割にたいしたことないわ(汗)
◆スクリプトは以下
◆仕組みはすごーくシンプル
sqlite3でデータ保持して、Tkinter/Treeviewで表示、入力はTkinterでほにゃらら…と、とてもシンプル。ユーザー操作は、書いて、登録して、読みだして、書いて・・・ただそれだけ。
◆でも大変だった
しかし、作るのは結構たいへんだった。
作りながら試行錯誤する…という効率の悪い作り方だったので。
独学あるあるかなぁ。
◆クラスの概念
ウィジェットを作成するにあたりクラスを使う必要があった…。クラスの概念がまだあやふやで迷いながらの作成だったので理解にはちょっと時間かかった。しかしクラスの扱い方の勉強になったので結果的には良かった。クラスって便利だね。
◆ウィジェットの挙動
ウィジェットの全ての部品を試してはいないけど、ウィジェット作成の際の挙動がよくわかった。VBAのユーザーインターフェース作成で何度も挫折して「GUI作るの面倒くさい病」だったけど、今回のTkinterで少しは解消できた。
◆SQL
SQLの基本構文はなんとなく理解していたものの、pythonで変数をSQLに組み込む際にちょっとハマった。なんというか…sqliteは独特な気がする。その分扱いやすさはあるんだろうけど。
◆日付の計算
datetime型にするのと、deltaで計算できる値を用意するなど、ちょーっと面倒だった。
日付関係もテキトーでは通れない課題だ。
◆入力制限
日付入力をする際に、ユーザーが間違った文字列を打たないように…というのが面倒だった。世の中にあるユーザー入力フォームって、こんな面倒な処理しないといかんの?ってくらいで・・・既存のスクリプトを作った方に頭が下がります…すごいね。
今回は数字8文字制限までは設けたけど、各数字について日付の許容範囲チェックまではできなかった。だってもう面倒なんだもの。。。(phpのほうがラクチン?)
◆ファイル操作
CSV読込、出力&保存、JPEGの保存などの機能があり、その保存先フォルダを作成する必要があるので、ファイル操作がまぁ分かるようになった。それよりは、ファイル操作するには、保存先のチェック、ない場合の作成など、意外と前準備があるのだな~ということに気が付いた。世の中のソフトウェアって大変だねぇ。。。
◆CSVファイルの文字化け
utf8とshift-jis、これは避けて通れない課題なんだね。
今までテキトーに流し見していたけど、これって結構重要なんだ~と、今更ながら気が付いた。
◆データの受け渡し
リストという配列、それと辞書、これらの扱いをしっかりできないとダメだねぇ。
けっこうout of indexしまくった。。。
おかげさまでなんとなくデータ取り扱いに慣れた。
◆関数
関数の扱い方がようやくわかってきた。
戻り値あり、なし。
最初の頃って手続き型でずらずら~っと書いて、とりあえず動くかどうかをチェックする…という感じだったけど、これって後々面倒なのね。
「スクリプトは極力小さく作りなさい」というのが納得。