# -*- coding: utf-8 -*-
"""
ファイル選択ダイアログの活用
"""

import tkinter as tk
import tkinter.scrolledtext as st
import tkinter.filedialog as fd


def loadFile(txBox:st.ScrolledText):
    """ 指示１ここから """
    # このコメントブロックの下に，
    # ファイルダイアログで「読み込むファイル」の名前を選択するよう
    # 命令文を書きなさい．

    f_name = fd.askopenfilename(title="読み込むファイル", filetypes=[("テキスト", ".txt")])
    """ 指示１ここまで """

    with open(f_name, "r", encoding="utf-8") as file:
        txBox.insert("1.0", file.read())

def saveFile(txBox:st.ScrolledText):
    f_name = fd.asksaveasfilename(title="書き込むファイル", filetypes=[("テキスト", ".txt")], defaultextension=".txt")

    with open(f_name, "w", encoding="utf-8") as file:
        """ 指示２ここから """
        # このコメントブロックの下に，
        # テキストボックスの中身を「書き込むファイル」に保存するよう
        # 命令文を書きなさい．

        file.write(txBox.get("1.0", "end"))
        """ 指示２ここから """


def main():
    base = tk.Tk()
    base.title("$u_id")

    # メニューバー
    mBar  = tk.Menu(base)

    # ファイル
    mFile = tk.Menu(mBar, tearoff=False)
    """ 指示３ここから """
    # このコメントブロックの下に，
    # メニューの「開く」を押すと loadFile を呼び出す
    # メニューの「保存」を押すと saveFile を呼び出す
    # イベントを登録する命令文になるようそれぞれ修正しなさい．
    # なお，開くも保存も txBox の文字列を対象とする．

    mFile.add_command(label="開く", command=lambda:loadFile(txBox))
    mFile.add_command(label="保存", command=lambda:saveFile(txBox))
    """ 指示３ここまで """

    mFile.add_separator()
    mFile.add_command(label="終了", command=base.destroy)

    # メニューの構成
    mBar.add_cascade(label="ファイル", menu=mFile)
    base.config(menu=mBar)

    txBox  = st.ScrolledText(base, width=40, height=20)
    la_var = tk.StringVar(value="結果：")
    label  = tk.Label(base, height=2, textvariable=la_var, anchor="nw", justify='left')
    bt     = tk.Button(base, text="処理")

    txBox.pack()
    bt.pack(anchor="w")
    label.pack(fill="x")

    base.mainloop()             # GUIの始動


if __name__ == "__main__":
    main()
