QGIS 플러그인 동적 로드 및 실행
목표
"QGIS 플러그인에서 다른 플러그인을 호출해 보십시오"이라고 적으면 "플러그인의 동적 로드와 조합하면 많은 일을 할 수 있지 않나요?"
신호로 동적 불러오는 플러그인을 연결해서 작동해 보세요.
미리 준비하다
Giithub을 위한 테스트용 가상 플러그인을 준비했습니다.다운로드는 여기.입니다.
QGIS3의 플러그인 폴더에 폴더aaa_plugin
, 폴더bbb_plugin
를 만들고 다운로드한 원본 파일을 복사합니다.
Python 콘솔에서 동적으로 로드
QGIS의 [플러그인] 메뉴에서 [Python 콘솔]을 시작합니다.
우선 현재 불러오는 플러그인 목록을 확인하십시오.>>> qgis.utils.plugins.keys()
dict_keys(['pluginbuilder3', 'plugin_reloader', 'db_manager', 'processing'])
aaa_plugin
및 bbb_plugin
모두 읽지 않았습니다.
그럼 제가 탑재aaa_plugin
해 볼게요.>>> plugin_name = 'aaa_plugin'
>>> qgis.utils.loadPlugin(plugin_name)
True
>>> qgis.utils.startPlugin(plugin_name)
True
>>> qgis.utils.plugins.keys()
dict_keys(['pluginbuilder3', 'plugin_reloader', 'db_manager', 'processing', 'aaa_plugin'])
확인됨aaa_plugin
로드됨plugins
.
그럼 aaa_plugin
방법을 시험해 봅시다.>>> plugin = qgis.utils.plugins[plugin_name]
>>> plugin.handle_trigger('dynamic_load')
메시지 대화상자에 매개 변수의 문자열을 표시합니다.
플러그인을 잘 불러온 것 같습니다.
플러그인 내의 동적 불러오기와 신호
이번에는 플러그인(aaa pluggin)에 다른 플러그인(bbb pluggin)을 불러오기 목적지에서 불러오기 신호로 연결하고 불러오기 신호를 받아 목적지에서 메시지를 표시합니다.
언어로 쓰면 불분명하게 백역하기 때문에 먼저 서열도를 붙였다.
동적 로드 플러그인loadAndExec
을 추가하고 사용자 정의 신호를 사용하여 신호를 수신emitMessage
합니다.
Git에서 소스 파일을 다운로드한 사람은 적절한 의견을 삭제합니다.
맞춤형 신호의 사용 방법은 다음과 같은 보도를 참고하였다.
PyQt5와pythhon3을 통한 GUI 프로그래밍[1]
소스는 이렇게.
aaa.pyimport os
from PyQt5.QtCore import QSettings, QTranslator, qVersion, QCoreApplication, pyqtSignal, QObject
from PyQt5.QtGui import QIcon
from qgis.utils import plugins, loadPlugin, startPlugin
from PyQt5.QtWidgets import QAction, QMessageBox
# Initialize Qt resources from file resources.py
from .resources import *
class CustomSignal(QObject):
mySignal = pyqtSignal(str)
class AAA:
myObject = CustomSignal()
"""QGIS Plugin Implementation."""
def __init__(self, iface):
self.iface = iface
self.plugin_instance = None
def initGui(self):
pass
def unload(self):
pass
def run(self):
pass
def loadAndExec(self, plugin_name, function_name, function_param):
plugin_list = plugins.keys()
if not plugin_name in plugin_list:
# ロード実行
try:
loadPlugin(plugin_name)
startPlugin(plugin_name)
self.plugin_instance = plugins[plugin_name]
# メソッド実行
eval("self.plugin_instance." + function_name + "('" + function_param + "')")
except:
QMessageBox.critical(self.iface.mainWindow(), 'error', "%s error" % plugin_name)
def connectTrigger(self, plugin_name):
self.parent_plugin_instance = plugins[plugin_name]
self.parent_plugin_instance.myObject.mySignal.connect(self.handle_trigger)
def handle_trigger(self, message):
QMessageBox.information(self.iface.mainWindow(), 'info', "%s" % message)
def emitMessage(self, message):
self.myObject.mySignal.emit(message)
그러면 플러그인 상태를 재설정하고 QGIS를 다시 시작한 다음 파이썬 컨트롤러를 열고 싶습니다.
마운트connectTrigger
는 실례를 얻을 때까지 똑같습니다. 이번 실행aaa_plugin
은 마운트loadAndExec
와 실행bbb_plugin
방법입니다.>>> plugin_name = 'aaa_plugin'
>>> qgis.utils.loadPlugin(plugin_name)
True
>>> qgis.utils.startPlugin(plugin_name)
True
>>> plugin = qgis.utils.plugins[plugin_name]
>>> plugin.loadAndExec('bbb_plugin', 'connectTrigger', plugin_name)
이렇게plugen에서aaa까지plugen에 연결할 수 있습니다.
aaa_plugen 신호를 보내보세요.>>> plugin.emitMessage('test')
메시지 대화상자에 매개 변수의 문자열을 표시합니다.
목적을 달성하다.
최후
좋은 느낌과 작업할 수 있다는 걸 확인했어요.
QGIS를 활용한 중소규모 업무시스템이라면 이 구조를 활용하면 유연하게 설계할 수 있다.
그게 다야.
본 보도의 허가증
이 글은 창의 공통 모델 4.0 국제 허가증 표시의 아래에서 제공한 것이다.
Reference
이 문제에 관하여(QGIS 플러그인 동적 로드 및 실행), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ozo360/items/4502ec951d5fc205243a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Giithub을 위한 테스트용 가상 플러그인을 준비했습니다.다운로드는 여기.입니다.
QGIS3의 플러그인 폴더에 폴더
aaa_plugin
, 폴더bbb_plugin
를 만들고 다운로드한 원본 파일을 복사합니다.Python 콘솔에서 동적으로 로드
QGIS의 [플러그인] 메뉴에서 [Python 콘솔]을 시작합니다.
우선 현재 불러오는 플러그인 목록을 확인하십시오.>>> qgis.utils.plugins.keys()
dict_keys(['pluginbuilder3', 'plugin_reloader', 'db_manager', 'processing'])
aaa_plugin
및 bbb_plugin
모두 읽지 않았습니다.
그럼 제가 탑재aaa_plugin
해 볼게요.>>> plugin_name = 'aaa_plugin'
>>> qgis.utils.loadPlugin(plugin_name)
True
>>> qgis.utils.startPlugin(plugin_name)
True
>>> qgis.utils.plugins.keys()
dict_keys(['pluginbuilder3', 'plugin_reloader', 'db_manager', 'processing', 'aaa_plugin'])
확인됨aaa_plugin
로드됨plugins
.
그럼 aaa_plugin
방법을 시험해 봅시다.>>> plugin = qgis.utils.plugins[plugin_name]
>>> plugin.handle_trigger('dynamic_load')
메시지 대화상자에 매개 변수의 문자열을 표시합니다.
플러그인을 잘 불러온 것 같습니다.
플러그인 내의 동적 불러오기와 신호
이번에는 플러그인(aaa pluggin)에 다른 플러그인(bbb pluggin)을 불러오기 목적지에서 불러오기 신호로 연결하고 불러오기 신호를 받아 목적지에서 메시지를 표시합니다.
언어로 쓰면 불분명하게 백역하기 때문에 먼저 서열도를 붙였다.
동적 로드 플러그인loadAndExec
을 추가하고 사용자 정의 신호를 사용하여 신호를 수신emitMessage
합니다.
Git에서 소스 파일을 다운로드한 사람은 적절한 의견을 삭제합니다.
맞춤형 신호의 사용 방법은 다음과 같은 보도를 참고하였다.
PyQt5와pythhon3을 통한 GUI 프로그래밍[1]
소스는 이렇게.
aaa.pyimport os
from PyQt5.QtCore import QSettings, QTranslator, qVersion, QCoreApplication, pyqtSignal, QObject
from PyQt5.QtGui import QIcon
from qgis.utils import plugins, loadPlugin, startPlugin
from PyQt5.QtWidgets import QAction, QMessageBox
# Initialize Qt resources from file resources.py
from .resources import *
class CustomSignal(QObject):
mySignal = pyqtSignal(str)
class AAA:
myObject = CustomSignal()
"""QGIS Plugin Implementation."""
def __init__(self, iface):
self.iface = iface
self.plugin_instance = None
def initGui(self):
pass
def unload(self):
pass
def run(self):
pass
def loadAndExec(self, plugin_name, function_name, function_param):
plugin_list = plugins.keys()
if not plugin_name in plugin_list:
# ロード実行
try:
loadPlugin(plugin_name)
startPlugin(plugin_name)
self.plugin_instance = plugins[plugin_name]
# メソッド実行
eval("self.plugin_instance." + function_name + "('" + function_param + "')")
except:
QMessageBox.critical(self.iface.mainWindow(), 'error', "%s error" % plugin_name)
def connectTrigger(self, plugin_name):
self.parent_plugin_instance = plugins[plugin_name]
self.parent_plugin_instance.myObject.mySignal.connect(self.handle_trigger)
def handle_trigger(self, message):
QMessageBox.information(self.iface.mainWindow(), 'info', "%s" % message)
def emitMessage(self, message):
self.myObject.mySignal.emit(message)
그러면 플러그인 상태를 재설정하고 QGIS를 다시 시작한 다음 파이썬 컨트롤러를 열고 싶습니다.
마운트connectTrigger
는 실례를 얻을 때까지 똑같습니다. 이번 실행aaa_plugin
은 마운트loadAndExec
와 실행bbb_plugin
방법입니다.>>> plugin_name = 'aaa_plugin'
>>> qgis.utils.loadPlugin(plugin_name)
True
>>> qgis.utils.startPlugin(plugin_name)
True
>>> plugin = qgis.utils.plugins[plugin_name]
>>> plugin.loadAndExec('bbb_plugin', 'connectTrigger', plugin_name)
이렇게plugen에서aaa까지plugen에 연결할 수 있습니다.
aaa_plugen 신호를 보내보세요.>>> plugin.emitMessage('test')
메시지 대화상자에 매개 변수의 문자열을 표시합니다.
목적을 달성하다.
최후
좋은 느낌과 작업할 수 있다는 걸 확인했어요.
QGIS를 활용한 중소규모 업무시스템이라면 이 구조를 활용하면 유연하게 설계할 수 있다.
그게 다야.
본 보도의 허가증
이 글은 창의 공통 모델 4.0 국제 허가증 표시의 아래에서 제공한 것이다.
Reference
이 문제에 관하여(QGIS 플러그인 동적 로드 및 실행), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ozo360/items/4502ec951d5fc205243a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
>>> qgis.utils.plugins.keys()
dict_keys(['pluginbuilder3', 'plugin_reloader', 'db_manager', 'processing'])
>>> plugin_name = 'aaa_plugin'
>>> qgis.utils.loadPlugin(plugin_name)
True
>>> qgis.utils.startPlugin(plugin_name)
True
>>> qgis.utils.plugins.keys()
dict_keys(['pluginbuilder3', 'plugin_reloader', 'db_manager', 'processing', 'aaa_plugin'])
>>> plugin = qgis.utils.plugins[plugin_name]
>>> plugin.handle_trigger('dynamic_load')
이번에는 플러그인(aaa pluggin)에 다른 플러그인(bbb pluggin)을 불러오기 목적지에서 불러오기 신호로 연결하고 불러오기 신호를 받아 목적지에서 메시지를 표시합니다.
언어로 쓰면 불분명하게 백역하기 때문에 먼저 서열도를 붙였다.
동적 로드 플러그인
loadAndExec
을 추가하고 사용자 정의 신호를 사용하여 신호를 수신emitMessage
합니다.Git에서 소스 파일을 다운로드한 사람은 적절한 의견을 삭제합니다.
맞춤형 신호의 사용 방법은 다음과 같은 보도를 참고하였다.
PyQt5와pythhon3을 통한 GUI 프로그래밍[1]
소스는 이렇게.
aaa.py
import os
from PyQt5.QtCore import QSettings, QTranslator, qVersion, QCoreApplication, pyqtSignal, QObject
from PyQt5.QtGui import QIcon
from qgis.utils import plugins, loadPlugin, startPlugin
from PyQt5.QtWidgets import QAction, QMessageBox
# Initialize Qt resources from file resources.py
from .resources import *
class CustomSignal(QObject):
mySignal = pyqtSignal(str)
class AAA:
myObject = CustomSignal()
"""QGIS Plugin Implementation."""
def __init__(self, iface):
self.iface = iface
self.plugin_instance = None
def initGui(self):
pass
def unload(self):
pass
def run(self):
pass
def loadAndExec(self, plugin_name, function_name, function_param):
plugin_list = plugins.keys()
if not plugin_name in plugin_list:
# ロード実行
try:
loadPlugin(plugin_name)
startPlugin(plugin_name)
self.plugin_instance = plugins[plugin_name]
# メソッド実行
eval("self.plugin_instance." + function_name + "('" + function_param + "')")
except:
QMessageBox.critical(self.iface.mainWindow(), 'error', "%s error" % plugin_name)
def connectTrigger(self, plugin_name):
self.parent_plugin_instance = plugins[plugin_name]
self.parent_plugin_instance.myObject.mySignal.connect(self.handle_trigger)
def handle_trigger(self, message):
QMessageBox.information(self.iface.mainWindow(), 'info', "%s" % message)
def emitMessage(self, message):
self.myObject.mySignal.emit(message)
그러면 플러그인 상태를 재설정하고 QGIS를 다시 시작한 다음 파이썬 컨트롤러를 열고 싶습니다.마운트
connectTrigger
는 실례를 얻을 때까지 똑같습니다. 이번 실행aaa_plugin
은 마운트loadAndExec
와 실행bbb_plugin
방법입니다.>>> plugin_name = 'aaa_plugin'
>>> qgis.utils.loadPlugin(plugin_name)
True
>>> qgis.utils.startPlugin(plugin_name)
True
>>> plugin = qgis.utils.plugins[plugin_name]
>>> plugin.loadAndExec('bbb_plugin', 'connectTrigger', plugin_name)
이렇게plugen에서aaa까지plugen에 연결할 수 있습니다.aaa_plugen 신호를 보내보세요.
>>> plugin.emitMessage('test')
메시지 대화상자에 매개 변수의 문자열을 표시합니다.목적을 달성하다.
최후
좋은 느낌과 작업할 수 있다는 걸 확인했어요.
QGIS를 활용한 중소규모 업무시스템이라면 이 구조를 활용하면 유연하게 설계할 수 있다.
그게 다야.
본 보도의 허가증
이 글은 창의 공통 모델 4.0 국제 허가증 표시의 아래에서 제공한 것이다.
Reference
이 문제에 관하여(QGIS 플러그인 동적 로드 및 실행), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ozo360/items/4502ec951d5fc205243a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(QGIS 플러그인 동적 로드 및 실행), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ozo360/items/4502ec951d5fc205243a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)