16.2. 코드 조각
힌트
The code snippets on this page need the following imports if you’re outside the pyqgis console:
1from qgis.core import (
2 QgsProject,
3)
4
5from qgis.gui import (
6 QgsOptionsWidgetFactory,
7 QgsOptionsPageWidget
8)
9
10from qgis.PyQt.QtCore import Qt
11from qgis.PyQt.QtWidgets import QMessageBox, QAction, QHBoxLayout
12from qgis.PyQt.QtGui import QIcon
이 장에서는 플러그인 개발을 쉽게 할 수 있도록 도와주는 코드 조각(snippet)에 대해 설명합니다.
16.2.1. 단축키로 함수 메소드를 호출하는 방법
플러그인 내부의 initGui()
함수에 다음 코드를 추가하십시오.
self.key_action = QAction("Test Plugin", self.iface.mainWindow())
self.iface.registerMainWindowAction(self.key_action, "Ctrl+I") # action triggered by Ctrl+I
self.iface.addPluginToMenu("&Test plugins", self.key_action)
self.key_action.triggered.connect(self.key_action_triggered)
unload()
함수에 다음 코드를 추가하십시오.
self.iface.unregisterMainWindowAction(self.key_action)
CTRL+I 단축키를 누르면 해당 메소드를 호출합니다.
def key_action_triggered(self):
QMessageBox.information(self.iface.mainWindow(),"Ok", "You pressed Ctrl+I")
16.2.2. 옵션 대화창에 있는 플러그인 용 인터페이스
에 사용자 지정 플러그인 옵션을 추가할 수 있습니다. 사용자 플러그인의 옵션을 위해 특정 주 메뉴 항목을 추가하는 것보다는 이 편이 좋은데, 모든 QGIS 응용 프로그램 설정과 플러그인 설정을 단일 위치에 모아두기 때문에 사용자가 설정을 찾고 탐색하기에 더 편하기 때문입니다.
다음 조각은 플러그인의 설정에 새로운 빈 탭만 추가할 것입니다. 사용자가 이 탭에 사용자 플러그인에 특화된 모든 옵션 및 설정을 채워 넣을 수 있습니다. 다음 클래스들을 서로 다른 파일로 분할할 수 있습니다. 이 예제에서 우리는 주 mainPlugin.py
파일 안에 클래스 2개를 추가할 것입니다.
1class MyPluginOptionsFactory(QgsOptionsWidgetFactory):
2
3 def __init__(self):
4 super().__init__()
5
6 def icon(self):
7 return QIcon('icons/my_plugin_icon.svg')
8
9 def createWidget(self, parent):
10 return ConfigOptionsPage(parent)
11
12
13class ConfigOptionsPage(QgsOptionsPageWidget):
14
15 def __init__(self, parent):
16 super().__init__(parent)
17 layout = QHBoxLayout()
18 layout.setContentsMargins(0, 0, 0, 0)
19 self.setLayout(layout)
마지막으로 가져온 것들을 추가하고 __init__
함수를 수정합니다:
1from qgis.PyQt.QtWidgets import QHBoxLayout
2from qgis.gui import QgsOptionsWidgetFactory, QgsOptionsPageWidget
3
4
5class MyPlugin:
6 """QGIS Plugin Implementation."""
7
8 def __init__(self, iface):
9 """Constructor.
10
11 :param iface: An interface instance that will be passed to this class
12 which provides the hook by which you can manipulate the QGIS
13 application at run time.
14 :type iface: QgsInterface
15 """
16 # Save reference to the QGIS interface
17 self.iface = iface
18
19
20 def initGui(self):
21 self.options_factory = MyPluginOptionsFactory()
22 self.options_factory.setTitle(self.tr('My Plugin'))
23 iface.registerOptionsWidgetFactory(self.options_factory)
24
25 def unload(self):
26 iface.unregisterOptionsWidgetFactory(self.options_factory)
팁
벡터 레이어 속성 대화창에 사용자 지정 탭 추가
비슷한 논리를 적용해서 QgsMapLayerConfigWidgetFactory
및 QgsMapLayerConfigWidget
클래스를 사용하면 레이어 속성 대화창에 플러그인 사용자 지정 옵션을 추가할 수 있습니다.