python学習：tkinterを使ってファイル起動・整理アプリを作ってみた　～Part２～

前回はコード全体を表示するにとどまりました。今回からはAPPの動きとプログラムの解説をしていきたいと思います。今回はメインメニューから、「フォルダ・ファイル選択画面」について解説していきます。

まずは、メインメニュー画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2631873/aff3767a-bc6f-e919-2476-1fe4bd2e772b.png)

この画面の「APP・ファイル起動」を押下します。すると下の画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2631873/cb56381b-889b-d45f-f346-d2183a4d27f3.png)

これは、半年前の私がよく使用していたフォルダおよびAPPを練習もかねてpythonのアプリケーションから簡単にアクセスできる仕様でプログラムを作成しました。ラジオボタンを選択し、下部の「実行」ボタンを押下することによって、開きたいファイルやAPPにアクセスできます。

それでは、実際に書いたコードを下に載せます。
```py
### 関数 ###
### サブウィンドウGUI ###

def sub_window1():
    # フォルダ・ファイル選択画面の作成（サブウィンドウ1）
    mini_window1 = tk.Toplevel(root)
    mini_window1.title("フォルダ・ファイル選択画面")
    
    
    # ラベルフレーム1
    frm1 = ttk.Labelframe(mini_window1,text = "フォルダ・ファイル選択",
                         padding = 10)
    frm1.grid(row = 0,column = 0,padx = 20,pady = 15)

    # ラジオボタン
    radio_value = tk.IntVar()
    
    ### 選択画面における条件分岐 ###
    
    def read_func():
        if radio_value.get() == 1:
            subprocess.Popen(["explorer",
                  r"C:\Users\h_mat\Documents\就職活動"]
                         ,shell = True)

        elif radio_value.get() == 2:
            subprocess.Popen(["start",
                      r"C:\Users\h_mat\Documents\その他\家計簿\家計簿.xlsm"]
                             ,shell = True)

        elif radio_value.get() == 3:
            subprocess.Popen(["explorer",
                      r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"]
                             ,shell = True)

        elif radio_value.get() == 4:
            subprocess.Popen(["explorer",r"C:\Users\h_mat\Documents\python"]
                             ,shell = True)
        
        # 例外処理
        else:
            messagebox.showwarning("エラー","フォルダまたはファイルを選択してください")
    
    
    
    # ラジオボタン1
    rdio_1 = ttk.Radiobutton(frm1,text = "就職活動",
                             variable = radio_value, value = 1)
    rdio_1.grid(row = 0,column = 0,
                padx = 20,ipadx = 20,pady = 5,
                ipady = 5,sticky = tk.W)

    # ラジオボタン2
    rdio_2 = ttk.Radiobutton(frm1,text = "家計簿",
                            variable = radio_value,value = 2)
    rdio_2.grid(row = 0,column = 1,
                padx = 20,ipadx = 10,pady = 5,
                ipady = 5,sticky = tk.W)

    # ラジオボタン3
    rdio_3 = ttk.Radiobutton(frm1,text = "ブラウザ",
                            variable = radio_value,value = 3)
    rdio_3.grid(row = 1,column = 0,
                padx = 20,ipadx = 20,pady = 5,
                ipady = 5,sticky = tk.W)

    # ラジオボタン4
    rdio_4 = ttk.Radiobutton(frm1,text = "python",
                            variable = radio_value,value = 4)
    rdio_4.grid(row = 1,column = 1,
                padx = 20,ipadx = 10,pady = 5,
                ipady = 5,sticky = tk.W)
    
    # 実行ボタン
    button5 = tk.Button(mini_window1,text = "実行",
                        command = lambda:read_func())
    button5.grid(row = 3,column = 0,pady = 10)
```
上記のプログラムがサブウインドウ（フォルダ・ファイル選択画面）のプログラムです。まずはサブウインドウの関数から解説していきます。

サブウインドウ関数
```py
def sub_window1():
    # フォルダ・ファイル選択画面の作成（サブウィンドウ1）
    mini_window1 = tk.Toplevel(root)
    mini_window1.title("フォルダ・ファイル選択画面")
    
    
    # ラベルフレーム1
    frm1 = ttk.Labelframe(mini_window1,text = "フォルダ・ファイル選択",
                         padding = 10)
    frm1.grid(row = 0,column = 0,padx = 20,pady = 15)

    # ラジオボタン
    radio_value = tk.IntVar()
```
まずはサブウインドウの関数を定義していきます。画面全体を作成し、タイトルとして（"フォルダ・ファイル選択画面"）と表記します。次にラベルフレームの記述とラジオボタンを作成します。

ラジオボタン選択時の条件分岐の関数
```py
   ### 選択画面における条件分岐 ###
    
    def read_func():
        if radio_value.get() == 1:
            subprocess.Popen(["explorer",
                  r"C:\Users\h_mat\Documents\就職活動"]
                         ,shell = True)

        elif radio_value.get() == 2:
            subprocess.Popen(["start",
                      r"C:\Users\h_mat\Documents\その他\家計簿\家計簿.xlsm"]
                             ,shell = True)

        elif radio_value.get() == 3:
            subprocess.Popen(["explorer",
                      r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"]
                             ,shell = True)

        elif radio_value.get() == 4:
            subprocess.Popen(["explorer",r"C:\Users\h_mat\Documents\python"]
                             ,shell = True)
        
        # 例外処理
        else:
            messagebox.showwarning("エラー","フォルダまたはファイルを選択してください")
```
if文による条件分岐です。条件式１~４にそれぞれ任意のパスを設定し選択した後にそのAPP及びフォルダのパスにアクセスできるようにしてあります。また、最後に例外処理とエラーメッセージを表記してあります。

ラジオボタンGUIと実行ボタン
```py
  # ラジオボタン1
    rdio_1 = ttk.Radiobutton(frm1,text = "就職活動",
                             variable = radio_value, value = 1)
    rdio_1.grid(row = 0,column = 0,
                padx = 20,ipadx = 20,pady = 5,
                ipady = 5,sticky = tk.W)

    # ラジオボタン2
    rdio_2 = ttk.Radiobutton(frm1,text = "家計簿",
                            variable = radio_value,value = 2)
    rdio_2.grid(row = 0,column = 1,
                padx = 20,ipadx = 10,pady = 5,
                ipady = 5,sticky = tk.W)

    # ラジオボタン3
    rdio_3 = ttk.Radiobutton(frm1,text = "ブラウザ",
                            variable = radio_value,value = 3)
    rdio_3.grid(row = 1,column = 0,
                padx = 20,ipadx = 20,pady = 5,
                ipady = 5,sticky = tk.W)

    # ラジオボタン4
    rdio_4 = ttk.Radiobutton(frm1,text = "python",
                            variable = radio_value,value = 4)
    rdio_4.grid(row = 1,column = 1,
                padx = 20,ipadx = 10,pady = 5,
                ipady = 5,sticky = tk.W)
    
    # 実行ボタン
    button5 = tk.Button(mini_window1,text = "実行",
                        command = lambda:read_func())
    button5.grid(row = 3,column = 0,pady = 10)
```
ラジオボタン１~４までのGUIをここで作りこみました。また、その下の実行ボタンは、押下時に条件分岐関数（read_func関数）を実行し、ラジオボタンにて指定されたパスにアクセスできる仕様となっております。

今回のPART2はここまでに致します。次回PART3はファイル整理画面の解説をしていきます。

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