初めてのtkinter (併せてpythonでのsql実行)
今回はpython GUIのtkinterについて、です。
pythonでGUIを作るのが初めてだったのでとても勉強になりました!!
併せて、pythonでDB操作もやったことがなかったので合わせて使ってみました。
備忘録も兼ねて書いていきます。
今回作成したGUIアプリですが、
・家計簿のために物品+金額を入力するとDBに保存していく
そんな簡単なアプリです。
完成形はこんな感じになりました!!
物凄く簡素。。。
また、入力した内容を書き込むテーブルはこちらになります。
こちらのアプリですが、大きく分けると3つで構成されております。
①GUI生成
②入力された値を抽出(ボタン押下時の割り込み処理)
③DBへの登録
です。
①GUI生成
先ほどお伝えした通り、tkinterを用いたGUIの生成です。
thinterはpython標準でインストールされているモジュールのようです。
PythonのGUIライブラリ「Tkinter」の紹介 | 株式会社キャパ CAPA,Inc.
標準搭載ということもあり、調べると使い方が色々と載っておりかなり勉強になりました。
今回はこちらのように実装しました。
geometryでGUIの大きさが指定できます。今回はそこまで大きくなくてもよいので250x150としました。
textBoxはtkinter.Entry(width=30)で生成でき、 .insert(tkinter.END,"初期値")でTextBoxに初期値を入力できます。
また、gridを用いるとexcel表のように使えるとのことで、ウェジェットの位置指定が楽にできました。
row:行、column:列指定となります。
root = tkinter.Tk() root.title("家計簿") root.geometry("250x150") item = tkinter.Label(text=u'物品') Input_item = tkinter.Entry(width=30) Input_item.insert(tkinter.END,"文字列を入力してください") money = tkinter.Label(text=u'金額') Input_money = tkinter.Entry(width=30) Input_money .insert(tkinter.END,"金額を入力してください") item.grid(row=0) Input_item.grid(row=0,column=1) money.grid(row=1) Input_money.grid(row=1,column=1) Button = tkinter.Button(text=u'ボタン') Button.bind("<Button-1>",GetValues) Button.grid(row=2)
②入力された値を抽出(ボタン押下時の割り込み処理)
ボタン割り込みですが、
Button.bind("<Button-1>",GetValues)
で実装できるよう。
今回はボタン押下時に入力した値を最終的にDBに書き込みたいので、
def GetValues(self): value_item = Input_item.get() value_money = Input_money.get() Insert_sql(value_item,value_money)
としました。
TextBoxから入力データを抽出するためには、TextBox名.get()で取得できます。
③DBへの登録
まずDBへのアクセスですが、こちらを実行すればDBへコマンド実行できるようにすることができます。
conn = sqlite3.connect('database.db') c = conn.cursor()
次にコマンド実行ですが、今回は入力した値をDBに書き込むため、insertを実行。
c.execute("insert into テーブル名 values (?,?,?)",date,item,money)
最後にcommitしてDBをCloseして終了になります。
conn.commit() conn.close()
自分が作成したソースコードはこちらになります。
import datetime import sqlite3 def Insert_sql(self,item,money): now = datetime.datetime.now() try: conn = sqlite3.connect('database.db') c = conn.cursor() c.execute("insert into kakeibo values (?,?,?)",now.strftime('%Y/%m/%d'),str(item),money) conn.commit() conn.close() except sqlite3.Error as e: print(e)
最後に。
thinterは結構簡単に使えましたし、調べると色々書き方とかわかるので使いやすいと感じました!!
一方、pythonでsql実行は通常の構文とは異なるため、少し癖があるように感じました!!
慣れれば使いやすいかと思いますが。
ちょっと調べた感じ、読み出し(select from)も少し癖がありそうなので使い勝手確認したいな、と思いました。