Начиная с 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))