PyQGIS를 사용하여 QGIS 컨텍스트 메뉴에서 "다른 이름으로 저장"제거 [닫기]


8

QGIS 레이어의 컨텍스트 메뉴에서 기존 옵션 ( "다른 이름으로 저장")을 제거하고 싶습니다. 지금까지 찾은 것은에서 새로운 작업을 추가 LegendItems하거나 새로운 옵션으로 완전히 덮어 쓰는 것입니다. 그러나 기존 기본 상황에 맞는 메뉴 옵션을 제거 할 수있는 옵션을 찾을 수 없습니다.

내가 본 것은 menuProvider () 메소드가 있지만이 메소드로 세부 정보를 얻을 수 없다는 것을 알았습니다 .

QGIS의 상황에 맞는 메뉴에서 기존 "다른 이름으로 저장"옵션을 제거하려면 어떻게해야합니까?


모든 옵션을 제거하고 사용자 정의 옵션을 추가하려면 다음을 확인하십시오 : gis.stackexchange.com/a/250170/49538
Fran Raga

나는 이미 찾고있는 것은 기존의 상황에 맞는 메뉴의 한 가지 동작 만 제거하는 것입니다.
Ahsan Mukhtar

나는 내가 어떤 행동을 deleted.You 복제 모시이 contextMenu를 추적 할 수없는 가망 아니라, 모든 작업은 QGIS API의 파이썬 방법을 생각 만하여 초안은 첫 번째 클릭을 작동하게
프랜 라가

1
모든 기본 동작을 어떻게 복제 할 수 있습니까?
Ahsan Mukhtar

이 예제 github.com/valheran/QDriller/blob/…qgis.org/api/2.18/classQgsLayerTreeViewDefaultActions.html을 확인하십시오. 그러나 모든 조치에 메소드가있는 것은 아닙니다.
Fran Raga

답변:


2

사용자 정의 클래스를 사용하여 현재 컨텍스트 메뉴를 대체해야합니다.

" 내보내기 "옵션 제거를위한 최소 샘플 코드

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

"Settings => Interface Customization"을 탐색하고 "Menus / mProjectMenu"에서 "mActionSaveProjectAs"를 비활성화하십시오.


1
이것이 QGIS의 프로젝트를 비활성화하는 옵션이지만 레이어는 아닙니다.
Ahsan Mukhtar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.