我的环境:pycharm2022.3.3 + qgis3.42安装
安装qgis 之后,自带了python环境,路径在:C:\Program Files\QGIS 3.42.2\apps\Python312
有文件python.exe, python3.exe 使用 python --version 查看都是 3.12版本的。但是在我的pycharm里显示就是3.10 不知为什么。
1、qgis的插件菜单加载启动路径:无论是绿色版的还是安装版本的qgis 都是这里
C:\Users\yansc\AppData\Roaming\QGIS\QGIS3\profiles\default\python\plugins
2、在这里创建好文件夹,my_test_plugin,用于qgis 启动时加载这里的自定义菜单。
使用pycharm打开,创建三个文件
__init__.py
main_plugin.py
metadata.txt
内容分别为:
def classFactory(iface): from .main_plugin import TestPlugin return TestPlugin(iface)
from qgis.PyQt.QtWidgets import QAction, QMenu, QApplication, QMainWindow from qgis.core import QgsProject from qgis.utils import iface import sys pydev_path = r'C:\Program Files\JetBrains\PyCharm 2022.3.3\debug-eggs\pydevd-pycharm.egg' sys.path.append(pydev_path) import pydevd_pycharm class TestPlugin: def __init__(self, iface): self.iface = iface self.menu = None self.actions = [] def initGui(self): # === 调试代码开始 === try: pydevd_pycharm.settrace('localhost', port=15678, stdoutToServer=True, stderrToServer=True) except Exception as e: print(f"失败:{str(e)}") # # === 调试代码结束 === # 修改现有菜单示例:重命名"图层"菜单 self.modify_existing_menu() # 添加新菜单示例 self.add_custom_menu() self.iface.messageBar().pushInfo("提示", e3) def unload(self): # 清理修改 self.restore_original_menu() self.remove_custom_menu() def modify_existing_menu(self): """修改原生菜单示例:将'图层'菜单改为'数据管理'""" self.original_layer_menu_title = None menu_bar = self.iface.mainWindow().menuBar() # 查找图层菜单(对象名可能因版本变化,建议通过遍历查找) for action in menu_bar.actions(): if action.menu() and action.menu().title() == "&Layer": self.original_layer_menu_title = action.menu().title() action.menu().setTitle("图层管理33") break def restore_original_menu(self): """恢复原始菜单标题""" if self.original_layer_menu_title: menu_bar = self.iface.mainWindow().menuBar() for action in menu_bar.actions(): if action.menu() and action.menu().title() == "数据管理": action.menu().setTitle(self.original_layer_menu_title) break def add_custom_menu(self): """添加自定义菜单""" menu_bar = self.iface.mainWindow().menuBar() # 创建主菜单 self.custom_menu = QMenu("地籍工具", menu_bar) menu_bar.addMenu(self.custom_menu) # 添加测试动作1 action1 = QAction("测试功能1", self.iface.mainWindow()) action1.triggered.connect(self.test_function1) self.custom_menu.addAction(action1) self.actions.append(action1) # 添加分隔线 self.custom_menu.addSeparator() # 添加测试动作2 action2 = QAction("显示图层数", self.iface.mainWindow()) action2.triggered.connect(self.show_layer_count) self.custom_menu.addAction(action2) self.actions.append(action2) def remove_custom_menu(self): """移除自定义菜单""" if self.custom_menu: menu_bar = self.iface.mainWindow().menuBar() menu_bar.removeAction(self.custom_menu.menuAction()) def test_function1(self): print("自定义菜单功能1被触发!") self.iface.messageBar().pushInfo("提示", "这是自定义菜单的测试功能") def show_layer_count(self): count = len(QgsProject.instance().mapLayers()) self.iface.messageBar().pushSuccess("统计", f"当前共有{count}个图层")
[general] name=Test Menu Plugin qgisMinimumVersion=3.6 description=测试菜单修改插件 version=1.0 author=YourName9999 email=your@email.com
3、添加python 解释器interpreter, 就选qgis里自带的。要一致
4、添加配置 Python Debug Server, 这里端口自己设定,然后按提示安装 pydevd-pycharm 包,按提示添加调试代码(见前面代码)
pip install pydevd-pycharm~=223.8836.34
5、调试步骤,可以先下断点,比如在
(1)选择QGIS Plugin Debug , 点击debug
(2)再启动QGIS
可见断点已捕获
pip install pydevd-pycharm~=232.10203 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install pydevd-pycharm~=223.8836.34 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install PySide6 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
转ui 到 py
C:\Program Files\QGIS 3.42.2\apps\Python312\Scripts>"C:\Program Files\QGIS 3.42.2\bin\python-qgis.bat" -m PyQt5.uic.pyuic main.ui -o main_ui.py
Error: Permission denied: "main_ui.py"
C:\Program Files\QGIS 3.42.2\apps\Python312\Scripts>"C:\Program Files\QGIS 3.42.2\bin\python-qgis.bat" -m PyQt5.uic.pyuic main.ui -o e:\main_ui.py