Usuń „Zapisz jako” z menu kontekstowego QGIS za pomocą PyQGIS [zamknięte]

8

Chcę usunąć istniejącą opcję („Zapisz jako”) z menu kontekstowego warstwy QGIS, co znalazłem do tej pory, aby dodać nową akcję w LegendItemslub całkowicie zastąpić nowymi opcjami. Ale nie mogłem znaleźć żadnej opcji, przy której byłbym w stanie usunąć istniejącą domyślną opcję menu kontekstowego.

Widziałem również, że dostępna jest metoda menuProvider () , ale nie można uzyskać żadnych szczegółów za pomocą tej metody.

Jak mogę usunąć istniejącą opcję „Zapisz jako” z menu kontekstowego QGIS?

Ahsan Mukhtar
źródło
aby usunąć wszystkie opcje i dodać opcje niestandardowe, zaznacz to: gis.stackexchange.com/a/250170/49538
Fran Raga
Widziałem już to, czego szukam, to usunąć tylko jedną akcję z istniejącego menu kontekstowego.
Ahsan Mukhtar
Robię wersję roboczą tylko przez pierwsze kliknięcie, myślę, że żadne działania nie są możliwe do usunięcia. Możesz replikować to menu kontekstowe, ale nie wszystkie działania mają metodę Pythona w QGIS Api
Fran Raga
1
Jak mogę zreplikować wszystkie domyślne akcje?
Ahsan Mukhtar,
Sprawdź ten przykład github.com/valheran/QDriller/blob/… i qgis.org/api/2.18/classQgsLayerTreeViewDefaultActions.html, ale nie wszystkie działania mają metodę
Fran Raga

Odpowiedzi:

2

Musisz zastąpić bieżące menu kontekstowe, używając swojej klasy niestandardowej

Minimalny przykładowy kod do usunięcia opcji „ Eksportuj

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
źródło
-1

Przejdź do „Ustawienia => Dostosowywanie interfejsu” i wyłącz „mActionSaveProjectAs” w „Menu / mProjectMenu”.

Królik
źródło
1
To jest opcja wyłączenia projektu QGIS, ale nie warstwy, prawda?
Ahsan Mukhtar