PyQt5 基础篇(一)-- 安装与环境配置

news2024/11/17 13:37:38

1 PyQt5 图形界面开发工具

        Qt 库是跨平台的 C++ 库的集合,是最强大的 GUI 库之一,可以实现高级 API 来访问桌面和移动系统的各种服务。PyQt5 是一套 Python 绑定 Digia QT5 应用的框架。PyQt5 实现了一个 Python模块集,有 620 个类,6000 个函数和方法。PyQt5 的优点:简单好用,功能强大, 跨平台支持,文档齐全,稳定性高,生态支持,开源免费。

        本文使用Anaconda+VSCode配置PyQt5环境,在开始之前新建Anaconda的虚拟环境,如果不需要虚拟环境可以直接使用默认的Base环境。详细安装过程请参考:Anaconda 和 PyTorch安装

2 Anaconda+VSCode+QT Designer配置PyQt5环境

2.1 创建虚拟环境

        虚拟环境的本质,就是在你电脑里安装了多个Python解释器(可执行程序),每个Python解释器又关联了很多个包、模块;项目代码在运行时,是使用特定路径下的那个Python解释器来执行。

# 格式如下
conda create -n 虚拟环境名字 python=版本  # 创建虚拟环境,开始新项目时执行一次
conda activate 虚拟环境名字 # 进入虚拟环境,每次打开终端都需要执行
conda deactivate # 退出虚拟环境,一般很少使用
conda remove -n 虚拟环境名字 --all  # 删除虚拟环境,一般很少使用
# 示例
conda create -n test python=3.8
conda activate test
conda deactivate
conda remove -n test --all

2.2 安装PyQt5

1. pip 安装 PyQt5

        在新创建的虚拟环境中安装PyQt5

pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple/

        安装了 PyQt5 就可以用 Python 语言编写 Qt 程序。例如,可以用一个简单的例程,检测 PyQt5 的安装是否成功。

from PyQt5 import QtWidgets
import sys

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)  # 初识化界面
    MainWindow = QtWidgets.QWidget()        # 生成一个主窗口
    MainWindow.show()                       # 显示主窗口
    sys.exit(app.exec_())                   # 在线程中退出  

        运行程序,将弹出如下界面:

2. pip 安装 QtTools

        虽然安装 PyQt5 就可以编程实现 GUI,但是学习、编程、调试、修改都是相当复杂和繁琐的。而 Qt Designer 基本是通过人机交互的排版方式进行界面设计,非常方便、直观。所以我在使用 Qt Designer 图形界面设计工具之后,就再也不愿意编写 Python 程序来实现 GUI 了。

        Qt Tools 包含了两个重要的工具:

  • 图形界面设计工具 Qt Designer,用于设计图形界面,生成 .ui文件,以 xml 格式存储界面和控件的属性;
  • UI 文件转换工具 PyUic,用于将 .ui 文件解析为 .py 文件的工具。
    Qt Tools 工具可以直接使用 pip 方式安装:
pip install PyQt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple/

2.3 VSCode安装插件

        在vscode应用商店中安装PYQT Integration插件,安装完成后点击pyqt integration右下角的小齿轮,选择扩展设置extension settings,设置下面两个path(可以搜索anaconda和python的安装目录进行查找)

  1. 运行调试选择Python解释器,我这里解释器是Python 3.8.16 (被命名为pyqt5)
  1. Pyqt-integration › Qtdesigner: Path

        我的路径为 C:\Users\CarpeDiem\.conda\envs\pyqt5\Lib\site-packages\qt5_applications\Qt\bin\designer.exe

  1. Pyqt-integration › Pyuic: Cmd

        我的路径为 C:\Users\CarpeDiem\.conda\envs\pyqt5\Scripts\pyuic5.exe

2.4 QtDesigner 和 PyUIC 的快速入门

  1. 在VSCode工作区右击,选择 PYQT:New Form,会弹出 Qt Designer 设计器

(1) 新建窗体

        首次运行 QtDesigner 时可能会自动弹出 “新建窗体” 对话框,也可以通过菜单栏选择:“文件 -> 新建” 或快捷键 “Ctrl+N” 唤起 “新建窗体” 对话框。

        在 “新建窗体” 窗口的左侧菜单选择 “MainWindow” 新建一个图形窗口。

(2) 设计图形界面

        QtDesigner 的使用界面与 AutoCAD 等设计软件类似,很好上手。

        主界面分左中右三部分,左侧是各种备选的控件对象,右侧上方的 “对象查看器” 显示控件的树状结构,右侧下方的 “属性编辑器” 显示控件的各种属性,中间部分用于显示所设计的界面。

        新建的窗口 “MainWindow” 虽然是一个空白的图形窗口,但已经生成了 centralwidget、menubar、statusbar 三个基本控件,可以在右侧上方 “对象查看器” 查看这些控件及结构。

        下面我们为新建的图形窗口添加几个图形控件:

        新建一个按钮控件:

  • 从左侧控件栏的 Button 中选择 PushButton 按钮,鼠标左键点中 PushButton 按钮不放,移动鼠标将 PushButton 按钮拖动到中间的新建图形窗口内的任意位置,松开鼠标左键,就在图形窗口位置生成了一个 PushButton 按钮对象。
  • 鼠标左键点击图形窗口中的这个 PushButton 按钮对象,拖动按钮可以调整控件的位置,对于其它控件也可以通过鼠标拖动来调整位置。
  • 鼠标选中 PushButton 按钮对象,控件周围的边界位置上就出现 8个蓝色的点,表示控件被选中,这时可以在右侧的 “属性编辑器” 内对对象的属性进行编辑和修改,例如:
    • 将 PushButton 对象的高度修改为 120,宽度修改为 40;
    • 将 PushButton 对象的 “QAbstractButton->text” 修改为 “测试按钮”;

新建一个文本显示框控件:

  • 从左侧控件栏的 InputWidget 中选择 TextEdit 按钮,鼠标左键选中 TextEdit 按钮拖动到新建图形窗口内的,松开鼠标左键就在图形窗口生成了一个 TextEdit 对象。
  • 鼠标选中 TextEdit 对象,在右侧的 “属性编辑器” 内可以对对象的属性进行编辑和修改,例如:
    • 将 TextEdit 对象的高度修改为 300,宽度修改为 200;
    • 对于 TextEdit 对象的显示内容可以用 html、markdown 等格式编辑,也可以鼠标双击 TextEdit 对象唤出 html 编辑对话框,输入希望显示的内容。

        现在,我们就已经用 Qt Designer 完成了一个基本的图形界面。

(3) 将设计的图形界面保存为 .ui文件

        在设计器中进行控件设计,保存。命名为 test03.ui。回到VSCode,发下工作目录下多出 *.ui 文件

(4) 右键生成的 test03.ui,选择 PYQT:Compile Form,则会自动生成 UI_test03.py 文件

  1. 我们编写一个主程序调用设计的图形界面 UI_test03.py,就可以完成一个图形界面应用程序
"""
@author: CarpeDiem
@date: 23/5/1
@version: 0.1
@description: PyQt5初步使用
@Idea: Demo of GUI by PyQt5
"""
from PyQt5.QtWidgets import QApplication, QMainWindow
import sys
from Ui_test03 import Ui_MainWindow

if __name__ == "__main__":
    app = QApplication(sys.argv)        # 创建应用程序对象
    main_window = QMainWindow()         # 创建主窗口
    ui = Ui_MainWindow()
    ui.setupUi(main_window)
    main_window.show()                  # 显示主窗口
    sys.exit(app.exec_())               # 在主线程中退出 

        运行程序 GUI_Demo2.py,将弹出如下的图形界面:

        这里的按钮和点击之后并没有任何反应,这是因为我们还没有设置这些控件所触发的动作和应用。在以后的程序中,我们将不断增加和丰富这个图形界面应用程序。

补充:

        常见错误:无法将*.ui文件转为py文件
        将 *.ui 文件转为py文件使用的是 pyuic5.exe 程序,常用的命令为 pyuic5 -o destination.py source.ui,其中-o 是操作参数,表示要生成一个文件,即将 source.ui 转换成 destination.py。在配置好PYQT Integration插件后,经常会遇到ImportError: DLL load failed: 找不到指定的模块 的错误。常见原因有两个:

  1. python3.dll丢失:通过Anaconda安装的Python缺少了python3.dll,可以从网上下载python3.dll,然后放到 Anaconda中python36.dll所在目录中;
  2. PyQT5包冲突(大部分是这个错误)

原因2的解决方法:

  • 执行 pip uninstall PyQt5 再重新安装
  • 如果还是不行,则使用 pip list 命令查看已安装的包,将里面有关 PyQt 和 Qt 的相关项全部卸载,然后重新执行上面的“PyQt5安装”步骤

参考

  • vscode配置pyqt5全过程:https://blog.csdn.net/qq_37080185/article/details/121616507
  • Python 小白从零开始 PyQt5 项目实战(8)汇总篇(完整例程):https://blog.csdn.net/youcans/article/details/120925109
  • PyQt5 教程:https://www.w3schools.cn/pyqt5/index.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MATLAB 点云非均匀体素下采样 (8)

MATLAB 点云非均匀体素下采样的不同参数效果测试 (8) 一、实现效果二、算法介绍三、函数说明3.1 函数3.2 参数四、实现代码(详细注释!)五、与固定步长采样法比较5.1 代码5.2 效果一、实现效果 不同参数调整下的非均匀体素下采样结果如下图所示,后续代码复制黏贴即可: 可…

入职6个月,被裁了...

我跟大多数人不大一样,从来没有说要等公司主动裁员拿补偿,我看自己没有什么价值或者是公司不行了,我都会主动离职。但是这次也太突然了。公司很大已上市,并不是不行了,总结原因就是,一是领导无能&#xff0…

【STM32CubeMX】F103ADC获取

前言 本文记录了我学习STM32CubeMX的过程,方便以后回忆。我们使用的开发板是基于STM32F103C6T6的。本章记录了基本的ADC值的获取流程,只单纯地记录了ADC端口的配置,没有加配像串口之类的调试,以简化流程。下面的流程是使用串口调试…

版本控制系统Git - 配置与基本使用

Git 1 Git简介1 Git概述2 Git的作用2.1 项目版本管理2.2 多人协同开发2.3 Git 的结构2.4 Git的工作原理 2 Git安装1 下载Git2 安装Git3 配置环境变量4 测试git是否安装成功5 安装git桌面工具(可以不安装) 3 Git基本操作1 设置Git用户2 新建仓库3 查看仓库状态4 添加到暂存文件5…

MATLAB 点云重复点去除(7)

MATLAB 点云重复点去除 (7) 一、实现效果二、算法介绍三、函数说明3.1 函数3.2 参数四、具体代码 (注释详细!)一、实现效果 效果上看不出来,但实际上左边的点云是右边的两倍 二、算法介绍 重复点的去除,是点云处理中常用的预处理方法,因为重复点的存在有时候会严重干…

C++系列四:数组

数组 1. 数组定义与初始化2. 多维数组3. 字符数组4. 总结 1. 数组定义与初始化 定义数组时需要指定数组的类型和大小: int myArray[10];上述代码定义了一个包含 10 个整数的数组。这些整数的下标从 0 开始,并以 1 个单位递增。 C 允许在定义数组时对其…

设计模式——装饰者模式(继承和接口的两种实现方式)

是什么? 场景案例:想必大家都吃过手抓饼吧,我们在点手抓饼的时候可以选择加培根、鸡蛋、火腿、肉松等等这些配菜,当然这些配菜的价格都不一样,那么计算总价就比较麻烦; 装饰者模式就是指在不改变现有对象…

springboot 集成 shardingSphere 加mybatisplus 自带增加 分页查询 和源代码包 分库分表 单库 分表 使用雪花算法id

目录 介绍 代码下载 效果 数据库 代码结构 上代码 pom.xml yml配置 建表语句 mapper.xml mybatisplus 配置.java logback application.java BaseEntity TUser TUserMapper TUserService TUserServiceImpl TUserController 测试 介绍 这套springboot shardi…

OSG笔记:AutoTransform实现固定像素大小的图形

需求 在(200,0,0)位置绘制固定10像素大小的正方体 实现方式 为了便于观察,例子中绘制了两条直线,相交于(200,0,0)。 //两根直线交于(200, 0, 0),用于辅助观察 {osg::Geometry* pLineGeom new osg::Geometry();osg::Vec3Array* pVertexArra…

python语法复习

print:输出函数 print(520)效果:输出520. print(hello)效果:输出hello. print(1020)【效果:输出了:1020】注:“ ”在print里面是一个连接符。 print(1020)【效果:输出了30】注: 在此处…

OJ 系统常用功能介绍 快速入门 C++ Python JAVA语言在线评测

技术支持微 makytony 服务器配置 腾讯云 2H4G 5M 60GB 轻量应用服务器 承载大约 200~400人使用,经过压力测试,评测并发速度可满足130人左右的在线比赛。 系统镜像选 Ubuntu 22.04 LTS ,Ubuntu是最热门的Linux发行版之一,是一款…

洞车系统常见问题解决指南

洞车常见问题解决指南 1.研发脚本处理问题1.1 WMS出库单无法审核1.2 OMS入库单无法提交,提示更新中心库存失败1.3 当出现OMS下发成功WMS/TMS/DMS还没有任务的情况时处理方案1.4 调度波次生成或者添加任务系统异常1.5 东鹏出库单部分出库回传之后要求重传1.6 更新订单…

spring、springmvc、springboot、mybatis框架高频面试题

一、spring 1、Spring框架中的单例bean是线程安全的吗? 不是线程安全的,是这样的: 当多用户同时请求一个服务时,容器会给每一个请求分配一个线程,这是多个线程会并发执行该请求对应的业务逻辑(成员方法&a…

ES索引结构升级-笔记

ES中索引的字段类型是不可修改的,只能是重新创建一个索引并设置好mapping,然后再将老索引的数据复制过去 查看老索引mapping GET /twitter/_mappings创建new索引,并指定mapping PUT /twitter410{"mappings": {"properties&…

金3银四结束了,回顾一下我2个月面试的公司....

金三银四结束了,还没有 offer 的同学不要气馁,该来的迟早会来。楼主从 年底 月有想法跳槽开始准备春招,一开始也是惨不忍睹,后来慢慢进入状态最近的面试基本都能走到终面,所以好好坚持,最后一定会有好结果的…

操作系统考试复习——第四章 存储器管理 4.1 4.2

存储器的层次结构: 存储器的多层结构: 存储器至少分为三级:CPU寄存器,主存和辅存。 但是一般分为6层为寄存器,高速缓存,主存储器,磁盘缓存,固定磁盘,可移动存储介质。…

无需重复造轮子—借助 Jetpack 组件,加速应用程序开发

简介 Android Jetpack 是谷歌官方推出的一套 Android 应用架构组件库,旨在为 Android 应用开发提供一种更优秀、更高效且更简单的方式。 Android Jetpack 对开发者带来了许多好处,以下是其中的一些: 提高开发效率:Jetpack 提供…

vue项目重复点击一个路由会报错如何解决

在新版本的vue-router中,重复点击同一个路由会出现以下报错 : 这个问题时vue-router 3.2.0版本的一个小Bug 方法有很多,比如降低路由版本(不推荐),但是推荐下面这种方式,比较简单靠谱 // 把这段代码直接粘贴到router/index.js中的Vue.use(VueRouter)之…

django:django2配置websocket

源码地址: https://gitee.com/liuhaizhang/django2-configuring-websockethttps://gitee.com/liuhaizhang/django2-configuring-websocket python3.9.0 django2.2.1 channels2.2.0 项目结构: test_websocket_django2 -chat -home -test_websocket_dja…

深度学习笔记之卷积神经网络(一)卷积函数与图像卷积操作

深度学习笔记之卷积神经网络——卷积函数 引言什么是卷积图像卷积操作 引言 从本节开始,将介绍卷积神经网络。本节将介绍卷积函数。 什么是卷积 卷积,是一种通过两个函数 f ( ⋅ ) 和 f(\cdot)和 f(⋅)和 g ( ⋅ ) g(\cdot) g(⋅)生成第三个函数 h ( …