大赵传奇

GIS解决方案,webgis , 桌面、数据、服务--QQ276605216

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

我的环境: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

 

posted on 2025-05-16 09:29  赵长青  阅读(364)  评论(0)    收藏  举报