上一篇文章中,苏南大叔向大家介绍了有关qgis的插件如何注册和注销按钮的。本篇文章中,苏南大叔想和大家聊聊有关上述按钮的位置问题。

苏南大叔:qgis插件开发:如何控制插件注册图标按钮的位置? - qgis-btn-position
qgis插件开发:如何控制插件注册图标按钮的位置? (图5-1)

本文测试环境:qgis@3.16.14-hannoverwin10。本文项目代码基于qgis plugin builder创建。详见如下链接:

目前,苏南大叔的代码涉及的qgis插件注册按钮位置,一共有三个位置。

初始化按钮

本文假设你已经初始化了一个按钮,具体的代码说明,请参见下面这篇文章。

def initGui():
        # ...
        icon = QIcon(os.path.dirname(__file__) + "/images/icon.svg")
        self.theIcon = QAction(icon, "按钮提示文字", self.iface.mainWindow())
        self.theIcon.setObjectName('testIcon')
        self.theIcon.setStatusTip("底部状态栏文字提示信息")
        self.theIcon.triggered.connect(self.iconAction)
        # ...

工具栏中公共位置

增加按钮:

def initGui():
        # ...
        self.iface.addToolBarIcon(self.theIcon)
        # ...

删除按钮:

def unload():
        # ...
        self.iface.removeToolBarIcon(self.theIcon)
        # ...

苏南大叔:qgis插件开发:如何控制插件注册图标按钮的位置? - qgis-btn-position-1
qgis插件开发:如何控制插件注册图标按钮的位置? (图5-2)

工具栏中独立位置

增加按钮:先初始化一个toolbar,然后再把icon添加到toolbar里面。一般来说,放在__init__()函数里面。

def __init__:
        # ...
        self.toolbar = self.iface.addToolBar('测试自定义工具栏')
        self.toolbar.setObjectName('MyToolbar')
        # ...
def initGui():
        # ...
        self.toolbar.addAction(self.theIcon)
        # ...

删除按钮:

def unload():
        # ...
        self.iface.removeToolBarIcon(self.theIcon)
        # ...
注意:这里删除按钮,仍然是使用self.iface删除的,而不是self.toolbar

苏南大叔:qgis插件开发:如何控制插件注册图标按钮的位置? - qgis-btn-position-2
qgis插件开发:如何控制插件注册图标按钮的位置? (图5-3)

菜单栏公共位置

def initGui():
        # ...
        self.iface.addPluginToMenu("父级菜单文字", self.theIcon)
        # ...

删除按钮:

def unload():
        # ...
        self.iface.removePluginMenu('测试菜单', self.theIcon)
        # ...

苏南大叔:qgis插件开发:如何控制插件注册图标按钮的位置? - qgis-btn-position-3
qgis插件开发:如何控制插件注册图标按钮的位置? (图5-4)

特殊情况

如果没有找到toolbar的按钮的话,可能是这个toolbar被整体隐藏了,右键就可以找出来。见下图:

苏南大叔:qgis插件开发:如何控制插件注册图标按钮的位置? - qgis-btn-position-4
qgis插件开发:如何控制插件注册图标按钮的位置? (图5-5)

相关链接

总结

qgis界面上,插件可以控制的按钮位置还很多。但是,目前苏南大叔就碰到这几个,其它情况待未来完善补充。

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。