【Python tkinter】環境設定をアプリに追加して詳細な設定を変更できるようにする
2020.05.08 /

様々なアプリケーションでおなじみの環境設定を、Pythonのtkinterで作成したデスクトップアプリに追加する方法を解説いたします。
環境設定は、各機能の設定値など細かい設定を変更できる設定画面です。
ここではOUTLOOK添付ファイル保存アプリを元に環境設定を追加していきたいと思います。

【Python】tkinterチュートリアル:OUTLOOK操作アプリ開発
それではtkinterで作成したアプリに環境設定を追加する方法を学びましょう。
環境設定用モジュールの作成
元になるアプリpyファイルと同じ階層に環境設定用モジュールを作成します。
ここではsetting.pyという名前で作成します。
この環境設定では出力先フォルダの初期値設定を変更できるようにします。
GUI画面は下記の画面になります。

登録ボタンを押下すると変更した設定はデータベースsqlite3に保存される仕組みとします。
setting.pyには以下コードを記入します。
import tkinter as tk
import tkinter.ttk as ttk
import sqlite3
from tkinter import messagebox
from tkinter import filedialog as tkFileDialog
from pathlib import Path
import sys
def config():
### 関数定義 ###
# フォルダ選択を押下した場合の処理
def select_file_default_folder():
#dir = 'C:\\'
dir = Path(sys.argv[0]).parent.absolute()
fld = tkFileDialog.askdirectory(initialdir = dir)
entry_default_folder.delete(0, tk.END)
entry_default_folder.insert(0, fld)
root.attributes('-topmost', True) ### 強制的に前面に表示させる
root.attributes('-topmost', False)
# 環境設定にて登録を押下した際の処理
def commit_setting():
dbname = "outlook.db"
connection = sqlite3.connect(dbname)
c = connection.cursor()
c.execute("""
UPDATE default_folder SET folder='{}';
""".format(entry_default_folder.get()))
connection.commit()
connection.close()
messagebox.showinfo('終了', '設定を登録いたしました')
root.attributes('-topmost', True) ### 強制的に前面に表示させる
root.attributes('-topmost', False)
# 終了を押下した場合の処理
def button_exit():
root.destroy()
### sqlite3接続設定 ###
# データベースを接続
dbname = "outlook.db"
connection = sqlite3.connect(dbname)
c = connection.cursor()
c.execute("SELECT * FROM default_folder")
df = c.fetchone()
connection.close()
### GUI画面の作成 ###
# メインウィンドウの設定
root = tk.Tk()
root.title("環境設定")
root.geometry("500x100")
### 設定の登録と終了ボタン ###
# メインフレームの作成と設置
frame_top = tk.Frame(root,bd=2,relief="ridge")
frame_top.pack(fill="x")
# 各種ウィジェットの作成
button_register = ttk.Button(frame_top,text="登録", command=commit_setting)
button_exit = ttk.Button(frame_top,text="終了", command=button_exit)
# 各種ウィジェットの設置
button_register.pack(side="left")
button_exit.pack(side="right")
### 各種環境設定項目 ###
# メインフレームの作成と設置
frame_setting = tk.Frame(root, relief="ridge")
frame_setting.pack(side="left")
# 各種ウィジェットの作成
label_default_folder = ttk.Label(frame_setting, text="デフォルトフォルダ設定:", width=20)
entry_default_folder = ttk.Entry(frame_setting, justify="left", width=40)
button_default_folder = ttk.Button(frame_setting, text="フォルダ選択", command=select_file_default_folder)
# 各種ウィジェットの設置
label_default_folder.grid(row=0, column=0, padx=10, pady=2)
entry_default_folder.grid(row=0, column=1, sticky=tk.W + tk.E, padx=2, pady=2)
button_default_folder.grid(row=0, column=2, sticky=tk.W + tk.E, padx=2, pady=2)
# 初期値の入力
entry_default_folder.insert(0, df[0])
root.mainloop()
### 直接起動時の内容 ###
# ----------------------------------------------
if __name__ == '__main__':
config()
config関数内にGUI画面を作成するtkinterの記述と、select_file_default_folder関数、commit_setting関数が定義されています。
tkinterによるGUI画面作成方法については下記リンクをご覧ください。

【Python】tkinterを使ったGUIアプリケーションの作成方法
tkinterとデータベースsqlite3の連携方法については下記リンクをご覧ください。

【Python tkinter】データベースsqlite3をGUIアプリと連携させる
環境設定モジュールが単体で実行しても動作するようにif __name__=='__main__'以下にconfig関数を記載しています。
これによりsetting.py単体で実行できるので、GUI画面や各関数のテストが容易になります。
if __name__=='__main__'についてより詳しい説明は下記リンクをご覧ください。

【Python】if __name__==’__main__’の意味とアプリ開発での使い方
環境設定setting.pyのインポート
環境設定setting.pyが作成できましたら、次に対象アプリにてsetting.pyをインポートします。
本記事ではOUTLOOK添付ファイル保存アプリに環境設定を追加します。
以下のコードをアプリ側pyファイルに追記します。
from setting import config
モジュール(pyファイル)のインポートについては下記リンクをご覧ください。

【Python】インポートimportでpyファイルの読み込み・処理呼び出し
config関数を実行するコマンドを追加
setting_menu.add_command(label='環境設定', command=config)
メニューバーの環境設定にsetting.pyファイル内のconfig関数をcommandで設定しました。
これにより、環境設定がクリックされるとsetting.pyのconfig関数が実行されます。
これでアプリに環境設定の追加が完了です。
まとめ
本記事「【Python tkinter】環境設定をアプリに追加して詳細な設定を変更できるようにする」はいかがでしたでしょうか?
これでかなりみなさんが思い描くデスクトップアプリケーションに近づいたのではないでしょうか。
ユーザーが望む設定値に変更できるようにするために、環境設定は必要不可欠なものです。
設定値をたくさん増やしてユーザーがカスタマイズしやすいようにしてみてください。