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도 변경됩니다. 이 상태로 프로그램을 종료했다가 다시 실행하면, 변경된 텍스트가 띄워집니다.
이런 식으로 설정값을 읽고 수정할 수 있습니다.
'Dev > python' 카테고리의 다른 글
[python] selenium 크롤링 find_element_by_css_selector 더 이상 사용 불가 (0) | 2022.07.21 |
---|---|
[python] SQLAlchemy, MySQL 연결 에러 해결 방법(pool_recycle 수정?) (0) | 2022.07.20 |
[pandas] 데이터프레임 컬럼 내 고유값의 개수 구하기, value_counts() 메소드 (0) | 2022.07.19 |
[pandas] 각 컬럼 데이터 중 NaN이 아닌 데이터의 개수를 보여주는 info() 메소드 (0) | 2022.07.18 |
[folium] 파이썬으로 지도 위에 마커 표시하는 방법 (2) | 2022.07.06 |
[python] 주소를 위도, 경도 좌표로 바꿔주는 Geocoder API 사용법 (1) | 2022.07.05 |
[matplotlib] 그래프 x축, y축 눈금 위치 설정하는 방법, xticks, yticks (0) | 2022.07.04 |
[python] 날짜, 시간을 다루는 경우 datetime 모듈 대신 arrow 추천 (0) | 2022.07.03 |