29.
29/45
def classFactory(iface): # pylint: disable=invalid-name
"""Load PluginTest class from file PluginTest.
:param iface: A QGIS interface instance.
:type iface: QgsInterface
"""
#
from .plugin_test import PluginTest
return PluginTest(iface)
30. 5.5 処理本体が記載されたファイル
処理が記載されたクラスが最低限持つ必要があるメソッドは、
initGui(): プラグインが使用可になった場合に実行されるメソッド
unload(): プラグインが使用不可になった場合に実行されるメソッド
の2つになります。
plugin_test.py の内容を見てみましょう。まずは initGui()です。
メニューやツールバーへのプラグインの追加自体は、self.add_action()で行われています。add_action()の
中の下記の行を見てみましょう。
QAction は、メニューやツールバーに追加されるユーザインタフェース部品になります。action の triggerd が
callback(引数で self.run が渡されています)に connect されています。
作成された QAction がツールバーとメニューに追加されているのがわかります。
実際に行われる処理は、run()に書かれています。
ここでは、作成済みのダイアログの表示を行っているだけになります。もし何か単一の処理をメニュー/ツール
バーから選択された際に行いたいだけであえば、ダイアログの表示部分を削除して、この中に処理を書けばい
いことになります。self.iface から qgis にアクセスもできます。
30/45
def initGui(self):
"""Create the menu entries and toolbar icons inside the QGIS GUI."""
icon_path = ':/plugins/PluginTest/icon.png'
self.add_action(
icon_path,
text=self.tr(u'plugin test'),
callback=self.run,
parent=self.iface.mainWindow())
action = QAction(icon, text, parent)
action.triggered.connect(callback)
if add_to_toolbar:
self.toolbar.addAction(action)
if add_to_menu:
self.iface.addPluginToMenu(
self.menu,
action)
def run(self):
"""Run method that performs all the real work"""
# show the dialog
self.dlg.show()
# Run the dialog event loop
result = self.dlg.exec_()
# See if OK was pressed
if result:
# Do something useful here - delete the line containing pass and
# substitute with your code.
pass
35. PluginTestDialog クラスは、先ほど変更した plugin_test_dialog_base.ui を継承しています。 PluginTestDialog
で accept()を定義して上書きしましょう。ここでは少し回りくどいやり方ですが、accept()の内容を空にしてしまいま
す。
次に、plugin_test.py の内容を書き換えます。dialog を作成した際に、dialog の button_box の accepted()
に別な処理を connect してしまいます。connect されたメソッドには、レイヤ数を dialog の textEdit に書き出す
処理を記述してあります。
35/45
FORM_CLASS, _ = uic.loadUiType(os.path.join(
os.path.dirname(__file__), 'plugin_test_dialog_base.ui'))
class PluginTestDialog(QtGui.QDialog, FORM_CLASS):
def __init__(self, parent=None):
"""Constructor."""
super(PluginTestDialog, self).__init__(parent)
# Set up the user interface from Designer.
# After setupUI you can access any designer object by doing
# self.<objectname>, and you can use autoconnect slots - see
# http://qt-project.org/doc/qt-4.8/designer-using-a-ui-file.html
# #widgets-and-dialogs-with-auto-connect
self.setupUi(self)
FORM_CLASS, _ = uic.loadUiType(os.path.join(
os.path.dirname(__file__), 'plugin_test_dialog_base.ui'))
class PluginTestDialog(QtGui.QDialog, FORM_CLASS):
def __init__(self, parent=None):
"""Constructor."""
super(PluginTestDialog, self).__init__(parent)
# Set up the user interface from Designer.
# After setupUI you can access any designer object by doing
# self.<objectname>, and you can use autoconnect slots - see
# http://qt-project.org/doc/qt-4.8/designer-using-a-ui-file.html
# #widgets-and-dialogs-with-auto-connect
self.setupUi(self)
def accept(self):
pass