중요
번역은 여러분이 참여할 수 있는 커뮤니티 활동입니다. 이 페이지는 현재 100.00% 번역되었습니다.
12. 읽기 및 저장하기 설정
힌트
PyQGIS 콘솔을 사용하지 않는 경우 이 페이지에 있는 코드 조각들을 다음과 같이 가져와야 합니다:
1from qgis.core import (
2  QgsProject,
3  QgsSettings,
4  QgsVectorLayer
5)
플러그인에 몇몇 변수를 저장하는 것이 유용한 경우가 많습니다. 여러분이 다음에 해당 플러그인을 실행할 때 변수들을 다시 입력하거나 선택하지 않아도 되기 때문입니다.
Qt 및 QGIS API 덕분에 이런 변수들을 저장하고 가져올 수 있습니다. 각 변수에 대해, 해당 변수에 접근하는 데 사용할 키를 선택해야 합니다 — 예를 들면 여러분이 가장 선호하는 색상에 대해 “favourite_color” 또는 비슷한 의미를 가진 다른 어떤 문자열도 사용할 수 있습니다. 키를 명명할 때 어떤 기준을 따를 것을 권장합니다.
설정을 다음 몇 가지 서로 다른 유형으로 구분할 수 있습니다:
- 전체 수준 설정(global settings) – 이 설정은 특정 머신의 사용자에 종속됩니다. QGIS 자체도 수많은, 예를 들면 메인 창의 크기 또는 기본 스냅 작업 허용 오차와 같은 전체 수준 설정을 저장합니다. 예를 들어 - setValue()및- value()메소드를 통해- QgsSettings클래스를 사용해서 설정을 처리합니다.- 다음은 이런 메소드들을 어떻게 사용하는지 보여주는 예시입니다. - 1def store(): 2 s = QgsSettings() 3 s.setValue("myplugin/mytext", "hello world") 4 s.setValue("myplugin/myint", 10) 5 s.setValue("myplugin/myreal", 3.14) 6 7def read(): 8 s = QgsSettings() 9 mytext = s.value("myplugin/mytext", "default text") 10 myint = s.value("myplugin/myint", 123) 11 myreal = s.value("myplugin/myreal", 2.71) 12 nonexistent = s.value("myplugin/nonexistent", None) 13 print(mytext) 14 print(myint) 15 print(myreal) 16 print(nonexistent) - value()메소드의 두 번째 파라미터는 선택적으로, 전달된 설정 이름에 대해 이전에 설정한 값이 없을 경우 반환하는 기본값을 지정합니다.- qgis_global_settings.ini파일을 통해 전체 수준 설정들의 기본값을 사전 환경설정할 수 있는 메소드에 대해 알고 싶다면 조직 내에서 QGIS 활용하기 를 참조하십시오.
- 프로젝트 수준 설정 — 프로젝트에 따라 달라지기 때문에 프로젝트 파일과 연동됩니다. 프로젝트 수준 설정의 예시로는 맵 캔버스 배경 색상 또는 대상 좌표계 등을 들 수 있습니다. 어떤 프로젝트에서는 하얀 배경과 WGS84가 어울리는 반면 다른 프로젝트에서는 노란 배경과 UTM 투영 좌표계가 어울리는 경우가 있는 법이죠. - 다음은 프로젝트 수준 설정 사용의 예시입니다. - 1proj = QgsProject.instance() 2 3# store values 4proj.writeEntry("myplugin", "mytext", "hello world") 5proj.writeEntry("myplugin", "myint", 10) 6proj.writeEntryDouble("myplugin", "mydouble", 0.01) 7proj.writeEntryBool("myplugin", "mybool", True) 8 9# read values (returns a tuple with the value, and a status boolean 10# which communicates whether the value retrieved could be converted to 11# its type, in these cases a string, an integer, a double and a boolean 12# respectively) 13 14mytext, type_conversion_ok = proj.readEntry("myplugin", 15 "mytext", 16 "default text") 17myint, type_conversion_ok = proj.readNumEntry("myplugin", 18 "myint", 19 123) 20mydouble, type_conversion_ok = proj.readDoubleEntry("myplugin", 21 "mydouble", 22 123) 23mybool, type_conversion_ok = proj.readBoolEntry("myplugin", 24 "mybool", 25 123) - 여러분도 알 수 있듯이, 많은 (정수, 문자열, 목록) 데이터 유형에 대해 - writeEntry()메소드를 사용하지만, 설정값을 다시 읽어오기 위한 메소드가 몇 가지 존재하며 각 데이터 유형에 대응하는 메소드를 선택해야 합니다.
- 맵 레이어 수준 설정 — 프로젝트의 맵 레이어 하나의 특정 인스턴스와 관련된 설정입니다. 이 설정은 레이어의 기저 데이터 소스와 연결되지 않기 때문에, 셰이프파일(shapefile) 1개의 맵 레이어 인스턴스를 2개 생성하는 경우 이 두 인스턴스는 설정을 공유하지 않을 것입니다. 맵 레이어 수준 설정은 프로젝트 파일 내부에 저장되기 때문에 여러분이 프로젝트를 다시 열면 레이어 관련 설정도 그대로 다시 불러올 것입니다. - customProperty()메소드를 사용해서 지정한 설정의 값을 검색하고,- setCustomProperty()메소드를 사용해서 설정할 수 있습니다.- 1vlayer = QgsVectorLayer() 2# save a value 3vlayer.setCustomProperty("mytext", "hello world") 4 5# read the value again (returning "default text" if not found) 6mytext = vlayer.customProperty("mytext", "default text")