近期利用VSCode\PyCharm+PyQGIS进行插件开发,现将要点总结一下:
一、VSCode,我没有配置成功,主要是最后一个阶段调试的时候老是不成功。以后会持续关注。但是有几个要点:
1、VSCode+PyQIS开发,智能提示的设置,见下面的文章。网上找不到相关的文章的。
写文章-CSDN创作中心
2、配置文件:
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Remote Attach",
"port": 5678,
"host": "localhost",
"request": "attach",
"type": "python",
//"processId": "${command:pickProcess}",
"pathMappings": [
{
"localRoot": "${workspaceFolder}", // path to your plugin where you are developing
"remoteRoot": "C:\\Users\\...\\AppData\\Roaming\\QGIS\\QGIS3\\profiles\\default\\python\\plugins\\your_plugin" // path to where the QGIS plugin folder lives
}
]
}
]
}
我觉得我应该是pathmappings这里设置的问题。
VSCode要启动一会(大概是加载插件的缘故吧),智能提示才能开始启效果。
二、PyCharm,我配置成功了,要注意一下顺序:
1、QGIS中要安装的插件:plugin reloader、plugin builder
2、QGIS中插件的所在目录,建议把工程直接创建在这里:
C:\Users\用户名\AppData\Roaming\QGIS\QGIS3\profiles\default\python\plugins
3、PyCharm 解释程序配置,如果不是lts版本的qgis,配置上有所不同:
4、服务配置:
3、插件安装:
1)添加包源:
应用后再移除,然后刷新,就可以了。一定是应用后再移除,然后刷新。
2)安装包pydevd-pycharm ,注意版本要与刚才服务的版本对应,这里我安装的是232.8660.197
4、编写代码:
可以用QGIS3.32.1安装时自带的QTDesinger来设计。1)先用plugin builder创建,2)然后用QTDesinger来修改界面。
然后编写代码:
def run(self):
"""Run method that performs all the real work"""
# Create the dialog with elements (after translation) and keep reference
# Only create GUI ONCE in callback, so that it will only load when the plugin is started
if self.first_start == True:
self.first_start = False
self.dlg = MyNameDialog()
self.dlg.button_box.clicked.connect(self.okclick)
self.dlg.button_box.clicked.connect(self.okclick)这句是给界面上的按键添加方法。
方法这样写:
def okclick(self):
pydevd_pycharm.settrace('localhost', port=53100, stdoutToServer=True, stderrToServer=True)
aa = "cccc"
print("MyName")
# 获取当前项目
project = QgsProject.instance()
layers = project.mapLayers()
for layer_id, layer in layers.items():
print(layer.name())
注意前面需要导入包:
import pydevd_pycharm
from qgis.PyQt.QtCore import Qt
from qgis.PyQt.QtGui import QIcon
from qgis.core import (
QgsProject,
QgsVectorLayer,
QgsMapLayerType,
)
import pydevd_pycharm pydevd_pycharm.settrace('localhost', port=53100, stdoutToServer=True, stderrToServer=True) 这两句是需要的,这样才能调试,才能查看变量。
然后打断点,点debug。
然后在界面上运行插件:
修改了代码后编译后,一定要运行一下reloader(上图后面的框),然后点击你的插件。
特别注意:
如果仅仅是编辑一段代码,那么直接用qt自带的python编辑器就行。这时好像是不能调试的。
最好的做法是,创建一个python脚本,用编辑器打开,在pycharm编写,然后它会同时同步到qgis的编辑器中。在qgis中运行看效果,要看变量,直接print(...),这个过程很折磨人哦。
如果要能调试,就必须要按照上面的步骤编写插件。