Profile picture

[PySide6] 프로그램 종료 후에도 설정 값을 유지시키는 방법 (QSettings)

JaehyoJJAng2024년 09월 26일

개요

사용자가 만든 GUI 애플리케이션에서,

사용자가 입력한 설정(예: 페이지 수, URL 등)을 프로그램 종료 후에도 자동으로 저장하고, 이를 불러오는 방법에 대해 기록해보려고 한다.


PySide6의 QSettings 클래스를 사용하면, 복잡한 파일 입출력 없이 간편하게 애플리케이션 설정을 관리할 수 있다!


QSettings란?

PySide6의 QSettings 클래스는 운영체제에 맞게 설정을 저장하는 기능을 제공하고 있다.


  • Windows: 레지스트리에 저장
  • macOS: plist 파일에 저장
  • Linux: 보통 .ini 파일 형식으로 저장

개발자는 파일 경로나 데이터베이스를 직접 관리할 필요 없이,

QSettings의 간단한 인터페이스를 통해 설정 값을 저장하고 불러올 수 있다.

정말 좋은 기능 같다!


QSettings 사용 방법

1. QSettings 객체 생성

우선, 애플리케이션의 식별을 위해

회사명애플리케이션명 등을 인자로 전달하여 QSettings 객체를 생성해주자.


이 때 회사명, 애플리케이션명은 본인이 임의로 지정한 것으로 구현자가 원하는 키워드로 변경해도 상관 없다.


2. 설정 값 저장하기

사용자가 입력한 값을 저장하려면 setValue(key, value) 메소드를 사용한다.

settings.setValue("page_count", page_count)
settings.setValue("delay", delay)

3. 설정 값 불러오기

저장된 값을 불러올 때는 value(key, defaultValue) 메서드를 사용하면 된다.

page_count = settings.value("page_count", 0)  # 기본값 0
delay = settings.value("delay", 0)            # 기본값 0

예제 코드

아래 코드는 QSettings를 활용해 UI에 입력된 페이지 수와 딜레이 값을 저장하고 불러오는 예제 코드이다.

import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QLineEdit, QLabel, QPushButton
from PySide6.QtCore import QSettings

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        # QSettings 객체 생성 (회사명, 애플리케이션명)
        self.settings = QSettings("MyCompany", "MyApp")

        # UI 구성
        self.page_label = QLabel("페이지 수:")
        self.page_input = QLineEdit()
        self.delay_label = QLabel("딜레이 (초):")
        self.delay_input = QLineEdit()
        self.save_button = QPushButton("저장")
        self.save_button.clicked.connect(self.save_settings)

        layout = QVBoxLayout()
        layout.addWidget(self.page_label)
        layout.addWidget(self.page_input)
        layout.addWidget(self.delay_label)
        layout.addWidget(self.delay_input)
        layout.addWidget(self.save_button)

        container = QWidget()
        container.setLayout(layout)
        self.setCentralWidget(container)

        # 애플리케이션 시작 시 설정 불러오기
        self.load_settings()

    def load_settings(self):
        """이전에 저장된 설정 값을 불러옵니다."""
        self.page_input.setText(self.settings.value("page_count", ""))
        self.delay_input.setText(self.settings.value("delay", ""))

    def save_settings(self):
        """현재 UI에 입력된 값을 설정에 저장합니다."""
        self.settings.setValue("page_count", self.page_input.text())
        self.settings.setValue("delay", self.delay_input.text())

    def closeEvent(self, event):
        """프로그램 종료 시 자동으로 설정을 저장합니다."""
        self.save_settings()
        super().closeEvent(event)

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

위 코드를 실행하면, 사용자가 입력한 페이지 수와 딜레이 값이 프로그램 종료 시 자동으로 저장되며,

다음 실행 시 자동으로 불러와진다 !~


Loading script...