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?


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)

-1

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


1
To jest opcja wyłączenia projektu QGIS, ale nie warstwy, prawda?
— Ahsan Mukhtar
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.