16.2. Secvențe De Cod¶
Această secțiune prezintă fragmente de cod destinate dezvoltării de pluginuri.
16.2.1. Cum se apelează o metodă printr-o comandă rapidă¶
În plugin, adăugați la 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)
La unload()
adăugați
self.iface.unregisterMainWindowAction(self.key_action)
Metoda care este apelată atunci când se apasă CTRL+I
def key_action_triggered(self):
QMessageBox.information(self.iface.mainWindow(),"Ok", "You pressed Ctrl+I")
16.2.2. Cum se pot comuta straturile¶
Există o API dedicat accesării straturilor din legendă. Iată un exemplu care modifică vizibilitatea stratului activ
root = QgsProject.instance().layerTreeRoot()
node = root.findLayer(iface.activeLayer().id())
new_state = Qt.Checked if node.isVisible() == Qt.Unchecked else Qt.Unchecked
node.setItemVisibilityChecked(new_state)
16.2.3. Cum se accesează tabelul de atribute al funcțiilor selectate¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | def change_value(value):
"""Change the value in the second column for all selected features.
:param value: The new value.
"""
layer = iface.activeLayer()
if layer:
count_selected = layer.selectedFeatureCount()
if count_selected > 0:
layer.startEditing()
id_features = layer.selectedFeatureIds()
for i in id_features:
layer.changeAttributeValue(i, 1, value) # 1 being the second column
layer.commitChanges()
else:
iface.messageBar().pushCritical("Error",
"Please select at least one feature from current layer")
else:
iface.messageBar().pushCritical("Error", "Please select a layer")
# The method requires one parameter (the new value for the second
# field of the selected feature(s)) and can be called by
change_value(50)
|
16.2.4. Interface for plugin in the options dialog¶
You can add a custom plugin options tab to
. This is preferable over adding a specific main menu entry for your plugin’s options, as it keeps all of the QGIS application settings and plugin settings in a single place which is easy for users to discover and navigate.The following snippet will just add a new blank tab for the plugin’s settings,
ready for you to populate with all the options and settings specific to your
plugin.
You can split the following classes into different files. In this example, we are
adding two classes into the main mainPlugin.py
file.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | class MyPluginOptionsFactory(QgsOptionsWidgetFactory):
def __init__(self):
super().__init__()
def icon(self):
return QIcon('icons/my_plugin_icon.svg')
def createWidget(self, parent):
return ConfigOptionsPage(parent)
class ConfigOptionsPage(QgsOptionsPageWidget):
def __init__(self, parent):
super().__init__(parent)
layout = QHBoxLayout()
layout.setContentsMargins(0, 0, 0, 0)
self.setLayout(layout)
|
Finally we are adding the imports and modifying the __init__
function:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | from qgis.PyQt.QtWidgets import QHBoxLayout
from qgis.gui import QgsOptionsWidgetFactory, QgsOptionsPageWidget
class MyPlugin:
"""QGIS Plugin Implementation."""
def __init__(self, iface):
"""Constructor.
:param iface: An interface instance that will be passed to this class
which provides the hook by which you can manipulate the QGIS
application at run time.
:type iface: QgsInterface
"""
# Save reference to the QGIS interface
self.iface = iface
def initGui(self):
self.options_factory = MyPluginOptionsFactory()
self.options_factory.setTitle(self.tr('My Plugin'))
iface.registerOptionsWidgetFactory(self.options_factory)
def unload(self):
iface.unregisterOptionsWidgetFactory(self.options_factory)
|
Sfat
You can apply a similar logic to add the plugin custom option to the layer
properties dialog using the classes QgsMapLayerConfigWidgetFactory
and QgsMapLayerConfigWidget
.