見出し画像

私の作った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は日本語でエントリーボックスに入力できない(コピペおよび表示は可)

この記事が気に入ったらサポートをしてみませんか?