tkinterを使ってテキストエディタのアプリを作ってみた　~PART2~

前回はアプリの概要とプログラム全体を掲載しましたので、今回は詳細についての解説をしていきたいと思います。まずはメインウインドウから。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2631873/aff3cd67-9cdd-5e48-dc7d-94182d77b9a7.png)
メインウインドウのFixed Phraseボタンを押下すると、サブウインドウが立ち上がります。プログラムの記述としては、サブウインドウからとなっておりますので、サブウインドウから順を追って説明します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2631873/a86a5909-ad5a-6d28-eab9-3cc110c1f719.png)
まずはSaveボタンの関数から解説します。
```py
# インポート
import tkinter as tk
from tkinter import ttk
import configparser
from tkinter import filedialog

# configparserのインスタンス化
config = configparser.ConfigParser()
# 読み込む設定ファイルを指定
config.read("setting.ini")

### 関数 ###
def sub_window():
    ### 関数(sub_window) ###
    #設定ファイルへ保存
    def writing_func():
        with open("setting.ini","w") as file:
            config.write(file)
    # Save
    def reg_func():
        # エントリーボックスの値を取得
        reg_phrase = reg_box.get()    //テキストボックス内の値を取得し
                                                      reg_phrase変数に格納
        # 定形文の登録　　　　　　　　　　　　　　　　　　　　
        if radio_value.get() == 1:
            rdio_1["text"] = reg_phrase
            config.set("Fixed Phrase","Phrase1",reg_phrase)
            writing_func()
        elif radio_value.get() == 2:
            rdio_2["text"] = reg_phrase
            config.set("Fixed Phrase","Phrase2",reg_phrase)
            writing_func()
        elif radio_value.get() == 3:
            rdio_3["text"] = reg_phrase
            config.set("Fixed Phrase","Phrase3",reg_phrase)
            writing_func()
        elif radio_value.get() == 4:
            rdio_4["text"] = reg_phrase
            config.set("Fixed Phrase","Phrase4",reg_phrase)
            writing_func()
        elif radio_value.get() == 5:
            rdio_5["text"] = reg_phrase
            config.set("Fixed Phrase","Phrase5",reg_phrase)
            writing_func()

　　　　//ifの分岐処理は選択されたラジオボタンの値を書き換える、
　　　　　　　　　　　　　　　　　または新しくフレーズを記憶するための処理

```
このreg_func関数がSaveボタン押下時の処理となります。次にSetボタン押下時の処理を解説します。
```py
    # Set
    def insert_func():
        # テキストボックスへ定形文の挿入
        if radio_value.get() == 1:
            txtbox.insert("insert",rdio_1["text"])
        elif radio_value.get() == 2:
            txtbox.insert("insert",rdio_2["text"])
        elif radio_value.get() == 3:
            txtbox.insert("insert",rdio_3["text"])
        elif radio_value.get() == 4:
            txtbox.insert("insert",rdio_4["text"])
        elif radio_value.get() == 5:
            txtbox.insert("insert",rdio_5["text"])

//メインウインドウのテキストボックスにラジオボタンにて選択された値を挿入する
　insert_func関数をSetボタン押下時に動かします。

```
次にサブウインドウのGUIを解説していきます。
```py
    ### GUI(sub_window) ###
    # サブウィンドウの作成
    fp_window = tk.Toplevel(root)
    # ラベルフレーム1
    frame1= ttk.Labelframe(fp_window,text = "Registration",
                          padding = 10)
    frame1.pack(padx = 20,pady = 10)
    # ラベル
    reg_label1 = tk.Label(frame1,text = "Fixed Phrase: ")
    reg_label1.pack(side = tk.LEFT,anchor = tk.W)
    # 定形文入力欄
    reg_box = tk.Entry(frame1,width = 50)
    reg_box.pack(side = tk.LEFT)
    # 保存ボタン
    save_button = tk.Button(frame1,text = "Save",command = reg_func)
    save_button.pack(padx = 10,side = tk.LEFT)
//Saveボタン押下時のコマンドreg_funcを割り当てます。
    # ラベルフレーム2
    frame2 = ttk.Labelframe(fp_window,text = "Save Slot",
                            paddin = 10)
    frame2.pack(padx = 20,pady = 5,fill = tk.X)
    # ラジオボタン
    radio_value = tk.IntVar()
    read_base = config["Fixed Phrase"]
    rdio_1 = ttk.Radiobutton(frame2,text = 
                            read_base.get("phrase1"),
                            variable = radio_value,value = 1)
    rdio_1.grid(row = 0,column = 0,sticky = tk.W)
    rdio_2 = ttk.Radiobutton(frame2,text = 
                            read_base.get("phrase2"),
                            variable = radio_value,value = 2)
    rdio_2.grid(row = 1,column = 0,sticky = tk.W)
    rdio_3 = ttk.Radiobutton(frame2,text = 
                            read_base.get("phrase3"),
                            variable = radio_value,value = 3)
    rdio_3.grid(row = 2,column = 0,sticky = tk.W)
    rdio_4 = ttk.Radiobutton(frame2,text = 
                            read_base.get("phrase4"),
                            variable = radio_value,value = 4)
    rdio_4.grid(row = 3,column = 0,sticky = tk.W)
    rdio_5 = ttk.Radiobutton(frame2,text = 
                            read_base.get("phrase5"),
                            variable = radio_value,value = 5)
    rdio_5.grid(row = 4,column = 0,sticky = tk.W)
        # Setボタン
    set_button = tk.Button(fp_window,text = "Set",
                          command = insert_func)
    set_button.pack(padx = 20,pady = 10,ipady = 5,fill = tk.X)
//Setボタンに関数insert_funcを割り当てます。

```
GUIの記述は主に、各コンポーネントの位置、大きさを指定しております。また、各ボタンには、押下時に動く関数を割り当てています。

今回は以上となります。次回はメインウインドウの機能及びプログラムについて解説していきたいと思います。

エンジニアファーストの会社　<a href="https://www.cre-co.jp/">株式会社CRE-CO</a>　H_M