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.