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 I尖云悶がdされたファイル
I尖がdされたクラスが恷詰浤屬脹慴があるメソッドは、
initGui(): プラグインが聞喘辛になった栽にg佩されるメソッド
unload(): プラグインが聞喘音辛になった栽にg佩されるメソッド
の2つになります。
plugin_test.py の坪否をてみましょう。まずは initGui()です。
メニュ`やツ`ルバ`へのプラグインの弖紗徭悶は、self.add_action()で佩われています。add_action()の
嶄の和の佩をてみましょう。
QAction は、メニュ`やツ`ルバ`に弖紗されるユ`ザインタフェ`ス何瞳になります。action の triggerd が
callback(哈方で self.run が局されています)に connect されています。
恬撹された QAction がツ`ルバ`とメニュ`に弖紗されているのがわかります。
gHに佩われるI尖は、run()にかれています。
ここでは、恬撹gみのダイアログの燕幣を佩っているだけになります。もし採かg匯のI尖をメニュ`/ツ`ル
バ`からxkされたHに佩いたいだけであえば、ダイアログの燕幣何蛍を茅して、この嶄にI尖をけばい
いことになります。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()を協xして貧きしましょう。ここでは富し指りくどいやり圭ですが、accept()の坪否を腎にしてしまいま
す。
肝に、plugin_test.py の坪否をきQえます。dialog を恬撹したHに、dialog の button_box の accepted()
にeなI尖を connect してしまいます。connect されたメソッドには、レイヤ方を dialog の textEdit にき竃す
I尖を峰してあります。
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
36. 36/45
class PluginTest:
"""QGIS Plugin Implementation."""
def __init__(self, iface):
C 福待 -
# Create the dialog (after translation) and keep reference
self.dlg = PluginTestDialog()
self.dlg.button_box.accepted.connect(self.set_text)
C 福待 -
def set_text(self):
self.dlg.textEdit.setText(str(self.iface.mapCanvas().layerCount()))