2022-07-07 22:32:37

GUI 프로그램을 만들 때 보통 설정값들은 config.ini라는 파일에 담아 놓고 필요한 경우 읽고 수정하곤 합니다. 사용자나 기기에 따라서 어떤 값들은 서로 다르게 설정해줘야 하는 경우가 있는데 그런 값들을 보통 config.ini 파일에 저장합니다. 파일명을 꼭 config.ini라고 할 필요는 없지만 많은 개발자들이 네이밍을 이렇게 해서 사용하기 때문에 그 전통을 지켜주는 것이 좋습니다.

 

config.ini 설정값 읽고 수정하는 방법

오늘은 PySide6로 GUI 프로그램을 만들 때 어떻게 config.ini 파일에 있는 값을 읽고 또 수정하는 지에 대해서 살펴보도록 하겠습니다. PySide가 아닌 PyQt로 코드를 짜셔도 동일하게 적용이 되실 것입니다. 우선 다음과 같은 config.ini 파일을 하나 만들겠습니다. 

 

SETTING이라는 섹션이 있고, 그 안에 message라는 키와 그에 해당하는 값, language라는 키와 그에 해당하는 값이 들어가 있습니다. 

 

간단히 message의 값을 프로그램 상에 띄우고, 그 값을 수정하면 수정한 값이 config.ini에 반영되는 PySide GUI 프로그램을 만들어보겠습니다. PySide6를 설치하지 않으신 분들은 먼저 설치해주세요. 

 

pip install PySide6

 

파이썬 코드는 다음과 같습니다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from PySide6.QtWidgets import QApplication, QMainWindow, QLineEdit
from PySide6.QtCore import QSettings
import sys
 
settings = QSettings("config.ini", QSettings.IniFormat)
 
class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
 
        qle = QLineEdit()
        qle.setText(settings.value("SETTING/message"))
        qle.textChanged.connect(self.qle_changed)
        self.setCentralWidget(qle)
 
    def qle_changed(self, s):
        print(s)
        settings.setValue("SETTING/message", s)
 
if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MainWindow()
    w.show()
    app.exec()
cs

 

1-3: 우선 필요한 모듈들을 import 해줍니다.

5: config.ini 파일을 입력받아 QSettings 객체를 생성합니다. 

11: QLineEdit 위젯을 하나 만듭니다. QLineEdit 위젯은 한 줄의 텍스트를 입력하기 위한 위젯입니다. 

12: 프로그램을 실행했을 때 config.ini에 있는 SETTING 섹션의 message 키의 값이 QLineEdit 위젯에 담기게 해줍니다.

13: QLineEdit 위젯의 텍스트가 변경되면 qle_changed 함수를 실행하도록 합니다. 여기서 textChanged는 시그널이고, qle_changed는 슬롯입니다. 시그널은 어떤 이벤트라고 생각하시면 되고, 슬롯은 그 이벤트에 대한 처리라고 생각하시면 됩니다.

18: 변경된 텍스트를 config.ini의 SETTING 섹션 message 키의 값으로 넣어줍니다.  

 

프로그램을 실행하면, 다음과 같이 QLineEdit에 hello라는 텍스트가 쓰여져 있을 것입니다.

 

 

텍스트를 수정해보겠습니다.

 

 

텍스트를 수정함과 동시에 config.ini에 있는 message도 변경됩니다. 이 상태로 프로그램을 종료했다가 다시 실행하면, 변경된 텍스트가 띄워집니다. 

 

 

이런 식으로 설정값을 읽고 수정할 수 있습니다.