Доступ к инструменту Vertext (текущий слой) - PullRequest
0 голосов
/ 29 января 2019

Начиная с QGIS 3, есть два вершинных инструмента: текущий слой и новый: все слои.Обычно я был в состоянии получить доступ ко всем действиям с кодом ниже.Но сейчас я не могу найти и активировать инструмент вершины (текущий слой).Даже не в поисках своей подписи!Я понятия не имею, как можно добавить действие, которое «не существует».Есть идеи?

def findAction(objName):
    try:
        toolbars = iface.mainWindow().findChildren(QToolBar)
        for toolbar in toolbars:
            for action in toolbar.actions():
                if isinstance(action, QWidgetAction):
                    if action.defaultWidget() and action.defaultWidget().actions():
                        dwa = action.defaultWidget().actions()
                        for a in dwa:
                            if IsSearchedAction(a,objName):
                                print ("a",a.objectName())
                                return a
                else:
                    if IsSearchedAction(action, objName): 
                        print ("action",action.objectName())
                        return action
        menubar = iface.mainWindow().menuBar()
        for action in menubar.actions():
            if action.menu():
                for action in action.menu().actions():
                    print("menu")
                    if action.menu():
                        for a in action.menu().actions():
                            if IsSearchedAction(a, objName): return a
                    else:
                        if IsSearchedAction(action, objName): return action
            else:
                if IsSearchedAction(action, objName): return action
        return None
    except Exception as e:
        print (e)

def IsSearchedAction(action, objname):
    objname = objname.lower()
    caption = action.text()
    caption = caption.replace("&", "")
    caption = caption.replace(".", "")
    caption = caption.strip()
    caption= caption.lower()
    return action.objectName().lower() == objname or caption == objname

print (iface.mapCanvas().mapTool().action().objectName())
action ="mActionVertexToolActiveLayer"
action ="mActionMeasure"
action ="mActionSelectFeatures"
action ="mActionVertexToolActiveLayer"#not found
print(findAction(action))
...