当前位置: 首页 > news >正文

PyQGIS开发 2 Qt开发入门

PyQGIS Qt开发入门

1 使用 Qt Designer

QGIS在安装后已经配套了Qt Designer,可以在开始菜单 -> QGIS -> Qt Designer for QGIS点击运行程序,或者在QGIS安装目录/bin/qgis-designer.bat(或qgis-ltr-designer.bat)点击运行。

选择Main Window模板创建,点击下方的创建后,将创建如下窗口:

添加资源文件:

向资源文件中添加资源:
先添加前缀“ico”,然后添加文件

在属性编辑器中修改窗体图标:

快捷键Ctrl+R预览窗体:

我们通过Main Window模板创建的MainWindow界面已经附带了三个组件,分别是centralwidget(中心组件)、menubar(菜单栏)与statusbar(状态栏):

添加Frame控件,并设置垂直布局:

添加DockWidget并保存为ui文件:

2 PyCharm 加载ui、qrc文件

我们需要将.ui文件和.qrc资源文件都转换为.py文件。pyqt提供了pyuic和pyrcc工具来进行转换,而Pycharm提供了一个外部工具加载方法,打开File -> Settings -> Tools -> External Tools 界面,点击左上角“+”进行配置填写:

  • Name: pyuic
  • Programs: .../QGIS安装路径/bin/python-qgis.bat(或python-qgis-ltr.bat)
  • Argument: -m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py
  • Working directory: $FileDir$

在PyCharm工程目录中右键“ui”文件 -> External Tools -> pyuic,点击运行后“ui”文件就会转换为py文件

再次打开File | Settings | Tools | External Tools界面添加工具pyrcc:

  • Name: pyrcc
  • Programs: .../QGIS安装路径/bin/python-qgis.bat(或python-qgis-ltr.bat)
  • Argument: -m PyQt5.pyrcc_main $FileName$ -o $FileNameWithoutExtension$_rc.py
  • Working directory: $FileDir$

在PyCharm工程目录中右键“qrc”文件 -> External Tools -> pyuic,点击运行后“qrc”文件就会转换为py文件

将其移到根目录下,并且右键项目,将其设为Source Root

3 运行界面

现在创建了mainWindow.py文件,但为了避免因改动ui文件而影响业务代码,所以不能在创建出来的mianWindow.py上进行代码编写,我们应该继承这个代码里的对象,在继承对象中编写代码,我们在根目录下新建mainWindowImpl.py:

from qgis.PyQt.QtWidgets import QMainWindow
from qgis.core import QgsProject
from ui.myWindow import Ui_MainWindow
​
PROJECT = QgsProject.instance()
class MainWindow(QMainWindow, Ui_MainWindow):def __init__(self):super(MainWindow, self).__init__()self.setupUi(self)

在这个新子类中,继承了多个父类,一个是QMainWindow,这个父类表明了这个类的实现是一个主窗口对象;第二个是Ui_MainWindow,就是我们自己转换来的mainWindow.py的类。

在main.py中调用窗体:

from qgis.core import QgsApplication
from PyQt5.QtCore import Qt
from mainWindowImpl import MainWindowif __name__ == '__main__':QgsApplication.setPrefixPath(r'D:\software\QGIS 3.38.0\apps\qgis', True)QgsApplication.setAttribute(Qt.AA_EnableHighDpiScaling)app = QgsApplication([], True)app.initQgis()mainWindow = MainWindow()mainWindow.show()app.exec_()app.exitQgis()

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Dirsearch在linux安装与运行
  • JavaWeb---纯小白笔记01:JavaWeb概述和Tomcat安装
  • JavaWEB概述
  • 【Verilog学习日常】—牛客网刷题—Verilog快速入门—VL21
  • cmake--get_filename_component
  • 常见的HTTP请求头和示例说明
  • 96 kHz、24bit 立体声音频ADC芯片GC5358描述
  • 分布式系统的概念与设计模式
  • 【Kubernetes】常见面试题汇总(二十五)
  • nestjs cache manager 很ioredis配合使用方案
  • 政安晨【零基础玩转各类开源AI项目】基于本地Linux Ubuntu系统部署及应用DDSP-SVC:基于DDSP(可微分数字信号处理)的实时端到端歌声转换系统
  • 操作系统迁移(CentOs -> Ubuntu)
  • 先导小型五轴数控加工中心助力职业教育
  • 数据结构和算法之线性结构
  • C++中模板的初级使用函数模板(刚刚接触模板概念的小白也能明白)
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 【前端学习】-粗谈选择器
  • Android开源项目规范总结
  • CAP 一致性协议及应用解析
  • Electron入门介绍
  • fetch 从初识到应用
  • js对象的深浅拷贝
  • js作用域和this的理解
  • Laravel5.4 Queues队列学习
  • Linux后台研发超实用命令总结
  • miaov-React 最佳入门
  • VuePress 静态网站生成
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 分布式任务队列Celery
  • 后端_ThinkPHP5
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 聊聊redis的数据结构的应用
  • 盘点那些不知名却常用的 Git 操作
  • 悄悄地说一个bug
  • 如何在 Tornado 中实现 Middleware
  • 使用 @font-face
  • 如何在招聘中考核.NET架构师
  • # Redis 入门到精通(七)-- redis 删除策略
  • #pragam once 和 #ifndef 预编译头
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (C语言)fgets与fputs函数详解
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • .gitignore不生效的解决方案
  • .NET Core中如何集成RabbitMQ
  • .net framework 4.8 开发windows系统服务
  • .NET Project Open Day(2011.11.13)
  • .NET 使用配置文件
  • .NET/C# 使用反射注册事件
  • .NET命名规范和开发约定
  • .NET轻量级ORM组件Dapper葵花宝典