アプリケーションでデータベースの接続文字などの設定データを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などアプリで使われる設定データを表すクラスで、アプリの開始から終了、次回の起動まで永続的にデータを持たせる必要があり、グローバルな変数とテキストファイルがあれば、なんとなく作れそうですが、そうするとプログラマの人数分、独自仕様が出来るので、あらかじめ用意してあるのは大変ありがたいと思います。
コメント