Entfernen Sie "Speichern unter" aus dem QGIS-Kontextmenü mit PyQGIS [geschlossen]

9

Ich möchte eine vorhandene Option ("Speichern unter") aus dem Kontextmenü der QGIS-Ebene entfernen. Bisher habe ich festgestellt, dass ich eine neue Aktion in die hinzufügen LegendItemsoder diese vollständig mit neuen Optionen überschreiben möchte. Konnte aber keine Option finden, mit der ich eine vorhandene Standard-Kontextmenüoption entfernen könnte.

Was ich auch gesehen habe, ist, dass die menuProvider () -Methode verfügbar ist, aber mit dieser Methode keine Details erhalten konnte.

Wie kann ich die vorhandene Option "Speichern unter" aus dem Kontextmenü von QGIS entfernen?

Ahsan Mukhtar
quelle
Um alle Optionen zu entfernen und benutzerdefinierte Optionen hinzuzufügen, überprüfen Sie dies: gis.stackexchange.com/a/250170/49538
Fran Raga
Ich habe bereits gesehen, dass nur eine Aktion des vorhandenen Kontextmenüs entfernt werden soll.
Ahsan Mukhtar
Ich mache einen Entwurf, indem ich nur mit dem ersten Klick arbeite. Ich denke, dass keine Aktionen möglich sind, die gelöscht werden. Sie können dieses Kontextmenü replizieren, aber nicht alle Aktionen haben eine Python-Methode in QGIS Api
Fran Raga
1
Wie kann ich alle Standardaktionen replizieren?
Ahsan Mukhtar
Überprüfen Sie dieses Beispiel github.com/valheran/QDriller/blob/… und qgis.org/api/2.18/classQgsLayerTreeViewDefaultActions.html, aber nicht alle Aktionen haben Methode
Fran Raga

Antworten:

1

Sie müssen das aktuelle Kontextmenü mit Ihrer benutzerdefinierten Klasse überschreiben

Minimaler Beispielcode zum Entfernen der Option " Exportieren "

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
quelle
-1

Menü "Einstellungen" => "Schnittstellenanpassung" im Menü / mProjectMenu deaktivieren mActionSaveProjectAs

Das Kaninchen
quelle
1
Das ist eine Option, um das QGIS-Projekt zu deaktivieren, aber nicht die Ebene, oder?
Ahsan Mukhtar