pathlib,tkinter,osを使って伝言メモ作成のプログラムとアプリを作ってみた！

　今回は前回、前々回と同じテキストを参考に、電話を受け取った際の伝言メモ作成のプログラムを作ってみました。まずはコマンドラインに必要事項を入力する基本的なプログラムから紹介し、その次に拡張版として、アプリから必要事項を入力するタイプのプログラムを紹介していきます。参考にした書籍はこちら
https://www.amazon.co.jp/Python%E3%81%A7%E3%83%81%E3%83%A3%E3%83%AC%E3%83%B3%E3%82%B8%E3%81%99%E3%82%8B%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%85%A5%E9%96%80-%E2%80%95%E2%80%95%E3%82%82%E3%81%86%E6%8C%AB%E6%8A%98%E3%81%97%E3%81%AA%E3%81%84%EF%BC%8110%E3%81%AE%E5%A3%81%E3%82%92%E8%B6%8A%E3%81%88%E3%81%A6%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC%E3%81%AB%E3%81%AA%E3%82%8D%E3%81%86-%E7%9F%B3%E4%B8%8A-%E6%99%8B/dp/4297132923/ref=sr_1_8?crid=1WZKKQJGTISZ&keywords=python+%E6%8A%80%E8%A1%93%E8%A9%95%E8%AB%96%E7%A4%BE&qid=1686603020&sprefix=python%E3%80%80gijutu%2Caps%2C163&sr=8-8

　最初にコマンドラインから入力する、プロトタイプから紹介していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2631873/70210b0b-39ef-f148-31a9-440ec37d49f6.png)
　このプログラムを実行すると、上図のように、コマンドラインから必要事項の入力を求められます。入力が完了し、Enterキーを押下すると、完成した伝言メモが出力されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2631873/32a1edac-f5e8-bb28-1ecc-7db77f7a904b.png)

　そして、完成した伝言メモはテキストに出力されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2631873/04cb5873-c6fc-3aac-ac39-a91ab6dddbc0.png)

　業務の中で、電話を受け取り、伝言メモを作成するシーンは多々あります。このプログラムがあれば、メモをいちいち作成しなくても、必要事項さえ入力すれば自動で伝言メモを作成してくれます。

では、プロトタイプのプログラムを紹介していきます。

```py
from datetime import datetime
from pathlib import Path

called_at = datetime.now()
called_at_str = called_at.strftime("%H:%M")

company = input("どこの会社から？：")
call_from = input("誰から？：")
call_to = input("誰あて？：")
tel = input("相手先の電話番号：")

message = (
    "件名：【電話伝言メモ】" + company + " " + call_from + "様\n"
    "\n" + call_to + "さん\n"
    "\n" + called_at_str + "頃" +
    "\n" + company + "の" + call_from + "様よりお電話がありました。\n"
    "折り返しをお願いいたします。\n"
    "TEL：" + tel 
)

print(message)

file_out = Path("tel_message.txt").open("w")
file_out.write(message + "\n")
file_out.close()

```
（プロトタイプなのでコメントはまだ入れていません。）

　まず、datetimeモジュールと、pathlibモジュールをインポートします。これにより、現在時刻とファイルのパスを取得できます。次にcompany,call_from,call_to,telの変数にどこの誰から誰宛にの必須項目と、相手先の電話番号を格納します。これらはすべてコマンドラインからの入力によるインプットとなっております。

　次にmessage変数に、文章にしたそれぞれの必須項目を格納します。そして、出来上がった伝言メモをコマンドラインに出力して確認用の文とします。

　最後にfile_out変数に出力するテキストファイルのパスと、ファイルを開く関数を格納し、その後、書込みの関数を使ってテキストファイルに必要事項を出力し、ファイルを閉じます。

　ここまでが、伝言メモ作成プログラムのプロトタイプです。（参考テキストに掲載の内容です。）


　次は応用として、アプリケーションから、必要事項を入力し、テキストファイルに出力するプログラムを紹介します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2631873/e7e128da-a03b-4377-1d4f-3216ea2761f5.png)

　上図のアプリケーションにより、必要事項を入力し、表示ボタンを押下すると完成した伝言メモが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2631873/24f949b7-d8b0-af7c-d9d5-bbe7e84c7bbe.png)

　そして、表示画面下部の"書込みボタン"を押下することにより、テキストファイルに出力される仕様にしてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2631873/2c113b9e-9d0f-410b-b271-ac57d34033b0.png)

　それでは、次に、プログラムを紹介していきます。

```py

# 各モジュールのインポート
from datetime import datetime
from pathlib import Path
import tkinter as tk
from tkinter import ttk

# 現在時刻の取得
called_at = datetime.now()
called_at_str = called_at.strftime("%H:%M")


# ファイル書き出しボタンの処理
def reg_func():
    # エントリーボックスの値を取得
    company = reg_box1.get()
    call_from = reg_box2.get()
    call_to = reg_box3.get()
    tel = reg_box4.get()

    # 定型文と組み合わせ
    message = (
    "件名：【電話伝言メモ】" + company + " " + call_from + "様\n"
    "\n" + call_to + "さん\n"
    "\n" + called_at_str + "頃" +
    "\n" + company + "の" + call_from + "様よりお電話がありました。\n"
    "折り返しをお願いいたします。\n"
    "TEL：" + tel 
    )  

   # テキスト書込み処理
    def write_func():
        file_out = Path("tel_message.txt").open("w")
        file_out.write(message + "\n")
        file_out.close() 

        root.destroy()
    
    
    # 完成文の表示

    fp_window = tk.Toplevel(root)
    label = tk.Label(fp_window,text = message)
    label.pack(padx = 100,pady = 50)

    # 書込みボタン
    write_button = tk.Button(fp_window,text = "書込み",
                             command = write_func)
    write_button.pack(padx = 10,pady = 10,ipady = 5,
                            fill = tk.Y,side = tk.BOTTOM)
    
    
# メインウインドウGUI
root = tk.Tk()
root.title("電話メッセージ")

# フレーム
mframe = ttk.Frame(root,padding = 5)
mframe.pack(padx = 5, pady = 5)

# ラベルフレーム1
frame1 = ttk.Labelframe(root,text = "どこの会社から？", padding = 10)
frame1.pack(padx = 20,pady = 10,side = tk.TOP)

# 入力欄1
reg_box1 = tk.Entry(frame1,width = 50)
reg_box1.pack(side = tk.LEFT)

# ラベルフレーム2
frame2 = ttk.Labelframe(root,text = "誰から？", padding = 10)
frame2.pack(padx = 20,pady = 10,side = tk.TOP)

# 入力欄2
reg_box2 = tk.Entry(frame2,width = 50)
reg_box2.pack(side = tk.LEFT)

# ラベルフレーム3
frame3 = ttk.Labelframe(root,text = "誰あて？", padding = 10)
frame3.pack(padx = 20,pady = 10,side = tk.TOP)

# 入力欄3
reg_box3 = tk.Entry(frame3,width = 50)
reg_box3.pack(side = tk.LEFT)

# ラベルフレーム4
frame4 = ttk.Labelframe(root,text = "相手先の電話番号", padding = 10)
frame4.pack(padx = 20,pady = 10,side = tk.TOP)

# 入力欄4
reg_box4 = tk.Entry(frame4,width = 50)
reg_box4.pack(side = tk.LEFT)

# 書き出しボタン
fp_button = tk.Button(root,text = "表示",command = reg_func)
fp_button.pack(padx = 10,pady = 10,ipady = 5,fill = tk.Y,side = tk.BOTTOM)

# ウィンドウ状態の維持
root.mainloop()

```
　こちらはコメントも入れましたので、わかりやすいかと思います。まず各モジュールをインポートします。その後、GUIにて作成したエントリーボックス内の値（必要事項）を取得し、各変数へと格納します。次に定型文との組み合わせで、message変数に完成した文を格納します。これらは、"表示ボタン"を押下した時の処理です。

　次に紹介する関数として、"書込みボタン"を押下した時の関数を紹介します。これもプロトタイプと同じで、テキストファイルのパスとopen関数をfile_out変数に格納し、書き込んだ後でファイルを閉じる処理となっております。最後に、書き込みが終了したら画面が閉じるように、root.destroy()を入れておきました。

　以上が、今回のテキストにて学習した内容になります。まだまだ拙いですが、一応形にはなりましたということで、今回の投稿を終わらせていただきます。