Elsaの技術日記(徒然なるままに)

主に自分で作ったアプリとかの報告・日記を記載

MENU

初めてのtkinter (併せてpythonでのsql実行)

今回はpython GUItkinterについて、です。
pythonGUIを作るのが初めてだったのでとても勉強になりました!!
併せて、pythonでDB操作もやったことがなかったので合わせて使ってみました。
f:id:Elsammit:20200530194025j:plain

備忘録も兼ねて書いていきます。
今回作成したGUIアプリですが、
 ・家計簿のために物品+金額を入力するとDBに保存していく
そんな簡単なアプリです。
f:id:Elsammit:20200602213815p:plain



完成形はこんな感じになりました!!
物凄く簡素。。。
f:id:Elsammit:20200618234740p:plain


また、入力した内容を書き込むテーブルはこちらになります。
f:id:Elsammit:20200618235835p:plain



こちらのアプリですが、大きく分けると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は結構簡単に使えましたし、調べると色々書き方とかわかるので使いやすいと感じました!!
一方、pythonsql実行は通常の構文とは異なるため、少し癖があるように感じました!!
慣れれば使いやすいかと思いますが。

ちょっと調べた感じ、読み出し(select from)も少し癖がありそうなので使い勝手確認したいな、と思いました。