PySide6のQSettingsでアプリケーションの設定ファイルとしてiniファイルの読み書き

python コンピュータ
python

アプリケーションでデータベースの接続文字などの設定データをiniファイルから読み込むサンプルコードを作成していました。

import sys, os
from PySide6.QtWidgets import QApplication,QMainWindow
from PySide6.QtGui import QFont
from PySide6.QtGui import QFont, QFontDatabase
from PySide6.QtCore import QSettings

# メインウィンドウ
class MyMainWindow(QMainWindow):

    # コンストラクタ
    def __init__(self):
        # スーパー(親)クラスのコンストラクタの呼び出し
        super().__init__()
        # ウィンドウサイズの設定
        self.setGeometry(0, 0, 640, 400)
        # フォームのタイトルを設定
        self.setWindowTitle("QSettingsのサンプル")
        # 設定ファイルの読み込み
        self.load_setting()
        
    # クローズイベント
    def closeEvent(self, event):
        # 設定ファイルの保存
        self.save_setting()
        event.accept()
    
    # 設定ファイルの読み込み
    def load_setting(self):
        # iniファイルからインスタンスを初期化
        config_file_path = os.path.join(os.path.expanduser("~"), "db_setting.ini")
        self.settings =  QSettings(config_file_path, QSettings.IniFormat)

        # iniファイルの有無
        if False == os.path.exists(config_file_path):
            # 無い場合作成、初期値をセット
            print("create ini file")
            self.settings.setValue("db_path", os.path.join(os.path.expanduser("~"), "filecomment.db"))

        # 設定項目の取得
        self.db_path = self.settings.value("db_path")
        print(self.db_path)
        # 設定値を変更(実験)
        #self.db_path = "hoge.db" # hoge.dbでiniファイルに保存される
        
    # 設定ファイルの保存
    def save_setting(self):
        # iniファイルに書き込み
        print("save ini file")
        self.settings.setValue("db_path", self.db_path)
        self.settings.sync()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MyMainWindow()
    window.show()
    sys.exit(app.exec())

QSettingsのコンストラクタでiniファイルのパスと種類がiniファイルであることを指定しています。
この際iniファイルが存在していれば、iniファイルを読み込みインスタンス化してくれます。
iniファイルが存在していない場合、多分インスタンスは出来ますが内容は空だと思いますので、setValue()で値をセットします。

iniファイルの読込(QSettingsのインスタンスの生成)はコンストラクタで、保存はcloseEventで実行するようにしてみました。

保存は.sync()で行われますが、setValue()で内容が変化しない限り保存はされないようです。

感想になりますが、Qtのライブラリの種類はアプリを作るにあったて使いそうなものは、大概用意されている感じがします。
今回つかったQSettingsなどアプリで使われる設定データを表すクラスで、アプリの開始から終了、次回の起動まで永続的にデータを持たせる必要があり、グローバルな変数とテキストファイルがあれば、なんとなく作れそうですが、そうするとプログラマの人数分、独自仕様が出来るので、あらかじめ用意してあるのは大変ありがたいと思います。

コメント