初めての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)も少し癖がありそうなので使い勝手確認したいな、と思いました。