
私の作ったToDoアプリのコード 公開します。
noteにコードを埋め込む機能があることに気づいたので、試しに以前作成したToDoアプリのコードを公開してみる。
なお、作成環境は以下の通り。
・MacBook Pro、macOS High Sierra
・Python 3.6.1
・エディタ;CotEditor
#! /usr/bin/env python
import re
import sys
from datetime import datetime
from pickle import dump, load
import os.path
from tkinter import *
import tkinter.messagebox
#ファイルの保存場所のパス
path = "/Users/Desktop/python/todo/todo.dat"
todos = []
root = Tk()
root.title(u"ToDoリスト")
frame1 = LabelFrame(root, text=u"内容", width=100, height=300)
frame2 = LabelFrame(root, text=u"入力")
frame3 = Frame(root)
#1行入力ボックスの内容と現在時刻をリストボックスに表示(ボタン用関数)
def adddata(value):
value = eb1.get()
date = eb2.get()
t1 = datetime.now().strftime("%Y/%m/%d ")
#入力ボックス内が空の場合、エラーメッセを表示して処理を止める
if value =="" or date =="" :
tkinter.messagebox.showinfo('information', 'ToDoの内容と締切日を入力して下さい。')
else:
tododetail = u"{}, 追加日;{}, 締切日;{}".format(value, t1,date)
lb1.insert(tkinter.END, tododetail)
todos.append(tododetail)
eb1.delete(0, tkinter.END)
eb2.delete(0, tkinter.END)
return todos
#削除用関数
def deletefunc(self):
#右クリックで選択している項目を削除
d1 = lb1.curselection()#選択項目の取得、d1はタプル
del todos[d1[0]]
lb1.delete(d1)
return todos
#アプリ終了用関数
def endfunc(self):
sys.exit()
#ファイル保存関数
def savefunc(self):
f = open('todo.dat', 'wb')
dump(todos, f)
f.close
tkinter.messagebox.showinfo('information', '保存しました。')
#リストボックス内の要素をカーソルで選択すると、右のボックスに表示される
def showitem(self):
eb1.delete(0, tkinter.END)
eb2.delete(0, tkinter.END)
str1 = lb1.get(tkinter.ACTIVE)
word1 = str1.split(",")
word2 = word1[2].split(";")
eb1.insert(tkinter.END, word1[0])
eb2.insert(tkinter.END, word2[1])
#ラベル(エントリーボックス用)
label1 = tkinter.Label(frame2, text= u"内容;")
label2 = tkinter.Label(frame2, text=u"締切日;")
label1.grid(row=0, column=0,sticky=tkinter.W)
label2.grid(row=1, column=0,sticky=tkinter.W)
#1行入力ボックス
eb1 = tkinter.Entry(frame2)
eb2 = tkinter.Entry(frame2)
eb1.grid(row=0, column=1, sticky=tkinter.W)
eb2.grid(row=1, column=1, sticky=tkinter.W)
#ボタン
b1 = Button(frame2, text=u"todo追加")
b2 = Button(frame3, text=u"アプリ終了")
b3 = Button(frame2, text=u"削除")
b4 = Button(frame2, text=u"保存")
b1.bind("<Button-1>", adddata)
b2.bind("<Button-1>", endfunc)
b3.bind("<Button-1>", deletefunc)
b4.bind("<Button-1>", savefunc)
b1.grid(row=2, column=1, sticky=tkinter.W)
b3.grid(row=2, column=2, sticky=tkinter.W)
b4.grid(row=2, column=3, sticky=tkinter.W)
b2.grid(row=0, column=0, sticky=tkinter.W)
#リストボックス
lb1 = Listbox(frame1, height=10, width=60, selectmode=SINGLE, takefocus=1)
yscroll1 = Scrollbar(frame1, orient= VERTICAL)
lb1.config(yscrollcommand=yscroll1.set)
yscroll1.config(command=lb1.yview)
lb1.grid(row=1, column=0, sticky=NS)
yscroll1.grid(row=1, column=1, sticky=NS)
lb1.bind("<Double-Button-1>", showitem)
#フレームの配置
frame1.pack(padx=5, pady=5, side=LEFT)
frame2.pack(padx=5, pady=5)
frame3.pack(padx=5, pady=5, side=BOTTOM)
#保存したtodoリストをリストボックスに表示する
#ファイルロード
if os.path.exists(path) == True:
f = open('todo.dat', 'rb') #!!!
todos = load(f)
#if isinstance(todos, list):
#tkinter.messagebox.showinfo('information', 'todosはリストです')
num = len(todos)
for i in range(0,num):
lb1.insert(i, todos[i])
root.mainloop()
#tkinterは日本語でエントリーボックスに入力できない(コピペおよび表示は可)