Supprimer «Enregistrer sous» du menu contextuel de QGIS à l'aide de PyQGIS [fermé]

9

Je veux supprimer une option existante ("Enregistrer sous") du menu contextuel de la couche QGIS, ce que j'ai trouvé jusqu'à présent, est d'ajouter une nouvelle action dans le LegendItems, ou d'écraser complètement avec de nouvelles options. Mais je n'ai trouvé aucune option en utilisant cela, je serais en mesure de supprimer une option de menu contextuel par défaut existante.

Ce que j'ai également vu, il existe une méthode menuProvider () , mais je n'ai pas pu obtenir de détails avec cette méthode.

Comment puis-je supprimer l'option "Enregistrer sous" existante du menu contextuel de QGIS?

Ahsan Mukhtar
la source
pour supprimer toutes les options et ajouter une option personnalisée, vérifiez ceci: gis.stackexchange.com/a/250170/49538
Fran Raga
J'ai déjà vu cela, ce que je recherche, c'est de supprimer une seule action du menu contextuel existant.
Ahsan Mukhtar
Je fais un brouillon en ne travaillant que le premier clic, je pense que toutes les actions ne sont pas supprimées. Vous pouvez reproduire ce menu contextuel, mais toutes les actions n'ont pas la méthode python dans QGIS Api
Fran Raga
1
Comment puis-je répliquer toutes les actions par défaut?
Ahsan Mukhtar
Consultez cet exemple github.com/valheran/QDriller/blob/… et qgis.org/api/2.18/classQgsLayerTreeViewDefaultActions.html mais toutes les actions n'ont pas de méthode
Fran Raga

Réponses:

1

Vous devez remplacer le menu contextuel actuel, en utilisant votre classe personnalisée

Exemple de code minimal pour supprimer l' option " Exporter "

from qgis.gui import QgsLayerTreeViewMenuProvider

ltv = iface.layerTreeView()
mp=ltv.menuProvider()
cm = mp.createContextMenu()

for action in cm.actions():
    # Need text value ,this object not have ObjectName
    if action.text() == "Exportar":
        cm.removeAction(action);
    #print (action.objectName())

class CustomMenuProvider(QgsLayerTreeViewMenuProvider):

  def __init__(self, view, actions):
    QgsLayerTreeViewMenuProvider.__init__(self)
    self.view = view
    self.defaultActions = actions

  def createContextMenu(self):
    if not self.view.currentLayer():
      return None
    m = QMenu()
    m.addActions(self.defaultActions)
    return m


provider = CustomMenuProvider(ltv, cm.actions())
ltv.setMenuProvider(provider)
Fran Raga
la source
-1

Menu "Paramètres" => "Personnalisation de l'interface" dans les menus / mProjectMenu désactiver mActionSaveProjectAs

Le lapin
la source
1
C'est une option pour désactiver le projet de QGIS, mais pas la couche, n'est-ce pas?
Ahsan Mukhtar