memopy

pythonで作ってみました的なブログ

⑩ 複数のウィジェットを配置【python tkinter sqlite3で家計簿を作る】

⑩ 複数のウィジェットを配置【python tkinter sqlite3で家計簿を作る】

表示画面設計図
f:id:memopy:20170602215840p:plain
前回までに作成したGUI
f:id:memopy:20170602225817p:plain


今までの機能を用いて、表示画面のGUIを作成した。
また、TreeviewのHeading部のフォントを変更する方法については別ページにまとめた。
ttk Treeview Headingのfontを変更する方法 - memopy

# -*- coding: utf-8 -*-

import tkinter as tk
import tkinter.ttk as ttk
import sqlite3

# 空のデータベースを作成して接続する
dbname = "database.db"
c = sqlite3.connect(dbname)
c.execute("PRAGMA foreign_keys = 1")

# rootフレームの設定
root = tk.Tk()
root.title("家計簿アプリ")
root.geometry("400x500")

# メニューの設定
frame = tk.Frame(root,bd=2,relief="ridge")
frame.pack(fill="x")
button1 = tk.Button(frame,text="入力")
button1.pack(side="left")
button2 = tk.Button(frame,text="表示")
button2.pack(side="left")
button3 = tk.Button(frame,text="終了")
button3.pack(side="right")

# 入力画面ラベルの設定
label1 = tk.Label(root,text="【表示画面】",font=("",16),height=2)
label1.pack(fill="x")

# 期間選択のラベルエントリーの設定
frame1 = tk.Frame(root,pady=15)
frame1.pack()
label2 = tk.Label(frame1,font=("",14),text="期間 ")
label2.pack(side="left")
entry1 = tk.Entry(frame1,font=("",14),justify="center",width=12)
entry1.pack(side="left")
label3 = tk.Label(frame1,font=("",14),text=" ~ ")
label3.pack(side="left")
entry2 = tk.Entry(frame1,font=("",14),justify="center",width=12)
entry2.pack(side="left")

# 表示ボタンの設定
button4 = tk.Button(root,text="表示",
                    font=("",16),
                    width=10,bg="gray",
                    command=lambda:select_sql(entry1.get(),entry2.get()))
button4.pack()

# ツリービューの作成
tree = ttk.Treeview(root,padding=10)
tree["columns"] = (1,2,3)
tree["show"] = "headings"
tree.column(1,width=100)
tree.column(2,width=75)
tree.column(3,width=100)
tree.heading(1,text="日付")
tree.heading(2,text="内訳")
tree.heading(3,text="金額")

# ツリービューのスタイル変更
style = ttk.Style()
# TreeViewの全部に対して、フォントサイズの変更
style.configure("Treeview",font=("",12))
# TreeViewのHeading部分に対して、フォントサイズの変更と太字の設定
style.configure("Treeview.Heading",font=("",14,"bold"))

# SELECT文の作成
sql = """
SELECT acc_date,item_name,amount
FROM acc_data as a,item as i
WHERE a.item_code = i.item_code
ORDER BY acc_date
"""
# ツリービューに要素の追加
i=0
for r in c.execute(sql):
    # 金額(r[2])を通貨形式に変換
    r = (r[0],r[1],"¥{:,d}".format(r[2]))
    tree.insert("","end",tags=i,values=r)
    if i & 1:
        tree.tag_configure(i,background="#CCFFFF")
    i+=1
# ツリービューの配置
tree.pack(fill="x",padx=20,pady=20)

# メインループ
root.mainloop()

表示画面のGUIが完成した!
f:id:memopy:20170604103013p:plain

次は、表示画面のGUIに処理を実装する。

質問や記事の誤りがありましたらコメントお願いします。


前の記事
⑨ 表(テーブル)の作成【python tkinter sqlite3で家計簿を作る】
次の記事
⑪ コールバック関数の定義【python tkinter sqlite3で家計簿を作る】