PyQGISを使用してQGISコンテキストメニューから[名前を付けて保存]を削除[終了]


9

QGISレイヤーのコンテキストメニューから既存のオプション(「名前を付けて保存」)を削除したいのですが、これまでのところ、新しいアクションをに追加するLegendItemsか、新しいオプションで完全に上書きします。しかし、既存のデフォルトのコンテキストメニューオプションを削除できるオプションを見つけることができませんでした。

menuProvider()メソッドが使用可能であることがわかりましたが、このメソッドでは詳細を取得できませんでした。

QGISのコンテキストメニューから既存の[名前を付けて保存]オプションを削除するにはどうすればよいですか?


すべてのオプションを削除してカスタムオプションを追加する場合は、こちらを確認してください。gis.stackexchange.com
Fran Raga

私はすでにそれを見てきました。探しているのは、既存のコンテキストメニューの1つのアクションのみを削除することです。
Ahsan Mukhtar

私は最初のクリックだけで作業してドラフトを作成します。アクションは削除できないと思います。このcontextMenuを複製できますが、すべてのアクションにQGIS Apiのpythonメソッドがあるわけではありません
Fran Raga

1
デフォルトのアクションをすべて複製するにはどうすればよいですか?
Ahsan Mukhtar

この例github.com/valheran/QDriller/blob/…qgis.org/api/2.18/classQgsLayerTreeViewDefaultActions.htmlを確認してください。 ただし、すべてのアクションにメソッドがあるわけではありません
Fran Raga

回答:


1

カスタムクラスを使用して、現在のコンテキストメニューをオーバーライドする必要があります

Export」オプションを削除するための最小限のサンプルコード

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

Menus / mProjectMenuのメニュー「設定」=>「インターフェースのカスタマイズ」は、mActionSaveProjectAsを無効にします


1
それはQGISのプロジェクトを無効にするオプションですが、レイヤーは無効にしませんか?
Ahsan Mukhtar、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.