(三)PyQT5+QGIS+python使用经验——解决各版本不兼容问题

一、问题描述

基础环境:Windows10(64)+ PyCharm2024 + QGIS 3.22。

目的:解决之前python版本多,pyqt5以及QT Designer交互使用存在环境变量冲突矛盾,以及QGIS安装时自带python、pyqt5等问题。

尤其是在QT Designer设计ui界面,利用pycharm运行时,需要调用qgis.gui时无法运行。

import qgis.gui

解决思路,以QGIS 3.22为主,优先使用自带的python和pyqt5,卸载电脑中其他的版本,保持版本之间的统一性;看能否减少冲突。

二、解决方式

1、卸载所有的python和QGIS

注意要把所有的环境变量都要清空,卸载时不会自动删除;

2、安装QGIS 3.22.0

安装后没有之前文章中QT环境变量的问题,可以直接打开;

先不着急安装python,先试一下QGIS是否可用。

使用快捷键“ctrl + alt + P”打开python的控制面板,

from qgis.core import QgsRasterLayer

没有报错,可以认为安装成功;

3.安装python

首先在QGIS的python控制面板中查看使用的版本和安装位置

可以看到QGIS 3.22.0 使用的是python 3.9.5,安装在“C:\QGIS 3.22.0\bin”路径下。

在python官网上下载python 3.9.5版本安装,并选中设置path环境变量。

3、设置PyCharm中的解释器和工具

(1)设置解释器

注意要选择QGIS安装路径下的解释器,并且是.bat文件,其他如python.exe文件是无效的解释器。

(2)设置外部三个工具

QtDesigner是打开QT Designer设计界面,在安装QGIS时软件以及自带安装,不需要再自己安装,注意需要映射到qgis-designer.bat文件中。 

QtDesignerProgram:C:\QGIS 3.22.0\bin\qgis-designer.bat
Argument:
Working directory:$ProjectFileDir$  

更正:Pyuic也可以成功,原来的地址复制错误,要注意ui文件需要在根目录下面,或是设置为根目录。PyUIC工具是将ui文件转化为py文件,在自己独立安装的qypt5库中。

更正2:更正Working directory参数,如果设置为$ProjectFileDir$,则需将ui放在根目录下面,否则报错,如果设置为$FileDir$ ,则不会报错   

PyUICProgram:C:\QGIS 3.22.0\bin\python-qgis.batArgument:-m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.pyWorking directory:$FileDir$  

 pyrcc5工具是将qrc文件转化为带_rc后缀的py文件,对应的是python-qgis.bat文件,填写相应的Program即可。

pyrcc5C:\QGIS 3.22.0\bin\python-qgis.bat-m PyQt5.pyrcc_main $FileName$ -o $FileNameWithoutExtension$_rc.py$ProjectFileDir$

三、测试案例

借用之前博客中的一个案例,忘了是哪个文章,后续找到了在引用,吐槽一下CSDN,现在动不动就文章收费,比起以前感觉太差劲了。


from qgis.core import QgsApplication
from qgis.gui import QgsLayerTreeView, QgsMapCanvas, QgsLayerTreeMapCanvasBridge# 告知QGIS路径
QgsApplication.setPrefixPath('C:/QGIS 3.22.0/apps/qgis', True)#
# # 第二个参数为是否启用GUI
qgs = QgsApplication([], False)
#
# 初始化QGIS
qgs.initQgis()# 开始写代码
print(QgsApplication.prefixPath())
print("Hello Qgis!")# 从内存中删除数据提供程序和层注册表来结束
qgs.exitQgis()

 

四、总结

本次折腾测试还算成功,劝告像我一样的入门者尽快尝试这个方法,可以减少折腾。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/491565.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ webrtc开发(非原生开发,linux上使用libdatachannel库)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、libdatachannel库的下载和build二、开始使用 1.2.引入库3.开始使用 总结 前言 使用c开发webrtc在互联网上留下的资料甚少,经过我一段时间的探…

SpringBoot 手动实现动态切换数据源 DynamicSource (中)

大家好,我是此林。 SpringBoot 手动实现动态切换数据源 DynamicSource (上)-CSDN博客 在上一篇博客中,我带大家手动实现了一个简易版的数据源切换实现,方便大家理解数据源切换的原理。今天我们来介绍一个开源的数据源…

上海艾一公司-运维工程师知识点备战

1.AD域控(ActionDirectory活动目录) ad域的作用:批量管理主机和用户(所以数量要多用这个才合适) 前置1:VM安装Windows镜像 2.IT资产管理 3.会议室管理

构建一个rust生产应用读书笔记四(实战2)

此门课程学习采用actix-web框架完成一个生产级别的rust应用,在 actix-web 中,Extractors 是一个非常重要的概念,它们用于从传入的 HTTP 请求中提取特定的信息片段。actix-web 提供了多种内置的提取器,以满足常见的使用场景。说白了…

前端学习笔记-Vue篇-04

4 Vue中的ajax 4.1 解决开发环境Ajax跨域问题 vue脚手架配置代理 配置参考 | Vue CLI方法一:在vue.config.js中添加如下配置: module.exports {devServer: {proxy: http://localhost:4000} } 说明: 1.优点:配置简单,请求资源时直接发给前端(8080)即…

InnoDB事务系统(二):事务的实现

事务隔离性由锁来实现。原子性、一致性、持久性通过数据库的 redo log 和 undo log 来完成。 redo log 称为重做日志,用来保证事务的原子性和持久性。undo log 用来保证事务的一致性。 有的 DBA 或许会认为 undo 是 redo 的逆过程,其实不然。redo 和 u…

c++理解(三)

本文主要探讨c相关知识。 模板是对类型参数化 函数模板特化不是模板函数重载 allocator(空间配置器):内存开辟释放,对象构造析构 优先调用对象成员方法实现的运算符重载函数,其次全局作用域找 迭代器遍历访问元素,调用erase,insert方法后,当前位置到容器…

实训项目11基于51单片机的门禁监测系统设计

00 要求 基于51单片机和RFID模块实现门禁的设计。使之具有以下功能: 能够正常的读卡信息;在正常刷卡通过后,可以控制电子锁动作;在刷卡失败后,可以产生报警信号; 01 功能分析 读卡后会RFID会自动通过TXD(串口&…

opencv——识别图片颜色并绘制轮廓

图像边缘检测 本实验要用到Canny算法,Canny边缘检测方法常被誉为边缘检测的最优方法。 首先,Canny算法的输入端应为图像的二值化结果,接收到二值化图像后,需要按照如下步骤进行: 高斯滤波。计算图像的梯度和方向。非极…

源码安装PHP-7.2.19

源码安装PHP-7.2.19 1.解压 tar -xjvf php-7.2.19.tar.bz2.编译 -prefix安装路径 cd php-7.2.19 ./configure --prefix/home/work/study 成功输出 3.make(构建) makemake testmake installlinux对php操作的一些命令 # 进入到php [rootvdb1 study]# cd php/ [rootvdb1 st…

数据库管理-第271期 Oracle 23ai:用MongoDB的方式来操作JSON二元性(20241214)

数据库管理271期 2024-12-14 数据库管理-第271期 Oracle 23ai:用MongoDB的方式来操作JSON二元性(20241214)1 初始化数据1.1 创建用户1.2 导入数据1.3 创建JSON关系二元性视图 2 创建ORDS服务2.1 下载JDK172.2 安装ORDS2.3 启用MongoDB API2.4…

2024 年的科技趋势

2024 年在科技领域有着诸多重大进展与突破。从人工智能、量子计算到基因组医学、可再生能源以及新兴技术重塑了众多行业。随着元宇宙等趋势的兴起以及太空探索取得的进步,未来在接下来的岁月里有望继续取得进展与突破。让我们来探讨一下定义 2024 年的一些关键趋势&…

WPF+MVVM案例实战与特效(三十八)- 封装一个自定义的数字滚动显示控件

文章目录 1、运行效果2、案例实现1、功能设计2、页面布局3、控件使用4、运行效果3、拓展:多数字自定义控件1、控件应用4、总结1、运行效果 在Windows Presentation Foundation (WPF)应用程序中,自定义控件允许开发者创建具有特定功能和外观的独特UI元素。本博客将介绍一个名…

ElasticSearch的自动补全功能(拼音分词器、自定义分词器、DSL实现自动补全查询、RestAPI实现自动补全查询)

文章目录 1. 什么是自动补全2. 拼音分词器2.1 初识拼音分词器2.2 下载拼音分词器2.3 安装拼音分词器2.4 测试拼音分词器 3. 自定义分词器3.1 拼音分词器存在的问题3.2 分词器(analyzer)的组成3.3 如何自定义分词器3.4 拼音分词器的可选参数3.5 配置自定义…

八股—Java基础(二)

目录 一. 面向对象 1. 面向对象和面向过程的区别? 2. 面向对象三大特性 3. Java语言是如何实现多态的? 4. 重载(Overload)和重写(Override)的区别是什么? 5. 重载的方法能否根据返回值类…

Java-08

类的抽象是将类的实现和使用分离, 而类的封装是将实现的细节封装起来并且对用户隐藏,用户只需会用就行。 类的合约指的是从类外可以访问的方法和数据域的集合以及与其这些成员如何行为的描述 isAlive()方法的返回值类型为布尔型(Boolean)。这个方法用于…

【MATLAB第109期】基于MATLAB的带置信区间的RSA区域敏感性分析方法,无目标函数

【MATLAB第108期】基于MATLAB的带置信区间的RSA区域敏感性分析方法,无目标函数 参考第64期文章【MATLAB第64期】【保姆级教程】基于MATLAB的SOBOL全局敏感性分析模型运用(含无目标函数,考虑代理模型) 创新点: 1、采…

机器视觉与OpenCV--01篇

计算机眼中的图像 像素 像素是图像的基本单位,每个像素存储着图像的颜色、亮度或者其他特征,一张图片就是由若干个像素组成的。 RGB 在计算机中,RGB三种颜色被称为RGB三通道,且每个通道的取值都是0到255之间。 计算机中图像的…

[数据结构#2] 图(1) | 概念 | 邻接矩阵 | 邻接表 | 模拟

图是由顶点集合及顶点间的关系(边)组成的数据结构,可用 G ( V , E ) G(V,E) G(V,E)表示,其中: 顶点集合 V V V: V { x ∣ x ∈ 某数据对象集 } V\{x|x\in\text{某数据对象集}\} V{x∣x∈某数据对象集},…

自动驾驶---小米汽车智驾进展

1 背景 小米汽车的进度,可能出乎很多人的意料,其它新势力车企花了5---10年的时间,小米汽车三年就成功造出了第一辆车,在小米su7月销2万的同时,获得了非常不错的口碑。笔者在之前的博客《微自传系列---雷军》中已经阐述…