如何在PyQGIS中彻底移除工具栏 使其不在视图菜单及右键列表显示
PyQGIS 彻底移除工具栏的实现方法
要实现同时从工具栏显示区域、右键工具栏弹出列表、「视图>工具栏」菜单中完全移除工具栏,需要同步删除菜单关联动作和工具栏实例,具体实现如下:
完整实现代码
from qgis.PyQt.QtWidgets import QToolBar # 示例:先创建一个测试用自定义工具栏 toolbar = QToolBar('Test Toolbar') iface.addToolBar(toolbar) # ------------------- 彻底删除核心逻辑 ------------------- # 1. 定位「视图」菜单下的「工具栏」子菜单 view_menu = iface.viewMenu() toolbars_menu = None for action in view_menu.actions(): # 用固定objectName匹配,不受界面语言切换影响 if action.objectName() == "mToolbarsMenu": toolbars_menu = action.menu() break # 2. 移除工具栏在「视图>工具栏」菜单中的对应动作 if toolbars_menu: for action in toolbars_menu.actions(): # 匹配工具栏标题,多语言环境建议替换为匹配toolbar的objectName更稳定 if action.text() == toolbar.windowTitle(): toolbars_menu.removeAction(action) break # 3. 从主窗口移除工具栏,自动同步删除右键弹出列表中的条目 iface.mainWindow().removeToolBar(toolbar) # 4. 销毁工具栏实例,彻底清除内存残留 toolbar.deleteLater()
补充说明
如果需要删除系统自带工具栏或者第三方插件创建的工具栏,可以先通过遍历查找获取目标工具栏实例:
# 遍历查找所有已加载的工具栏 for tb in iface.mainWindow().findChildren(QToolBar): # 可替换为windowTitle()匹配工具栏显示名称 if tb.objectName() == "目标工具栏的唯一objectName": target_toolbar = tb break
内容的提问来源于stack exchange,提问作者corvus
相关产品推荐
相关产品推荐

