【PyQt】PyQt学习(一)框架介绍+环境搭建

news2024/12/27 13:15:12

简介

写在最前面的话

在决定学习、使用一个框架之前需要考量如下几点:

  1. 框架运行效果;
  2. 框架应用范围;
  3. 框架学习成本和迁移成本;
  4. 实现自己所需功能的开发效率;

只有综合考量如上四个方面,才能更好地选择适合自己的框架;

Python GUI 框架介绍

TK

Tkinter 是 Python 内置的 GUI 框架,创建 Tkinter 的目的是为了给现代开发人员提供 Tk GUI 工具包的标准接口和它的 Python 绑定,它唯一的优点就是简单无依赖,TK 的入门门槛很低,但是精通难度大,它最大的问题是布局,不同于 PyQt 的布局管理器,TK 的布局完全使用代码实现,就开发效率而言较低,且它只提供 15 种控件,扩展性差。

PyQt

这个框架是本人首推的 Python GUI 框架,PyQt 是 Qt 框架的 Python 版本,Qt 本身是一个十分成熟的商业 GUI 框架,底层使用 C++进行开发。PyQt 是 Python 对 Qt 的包装,具有扩展性强、跨平台、显示效果好的优点,其次 PyQt 的接口和 Qt 的完全一致,所以采用 PyQt 开发 GUI 后期可以转 C++开发 Qt。需要注意的是,PyQt 有两种许可协议,分别是 GPLv3许可证和需要购买版权的商业许可证,GPLv3是强开源协议,意味着,如果你的应用程序里面使用了 PyQt,那么你的程序必须开源,否则法院传票了解一下,因此如果想要闭源商用,必须购买 Riverbank Computing 公司的商业许可证,目前 PyQt 已经推出了 PyQt 6,在 PyQt 5 的基础上对部分模块进行了升级,并添加一些新功能。

PySide 2

如果你既想享受 Qt 的强大功能,又想闭源商用,那么 PySide 完全适合你,说到 PySide,就不得不说,Qt 与 PyQt 之间的恩怨,Qt 的研发公司是 Nokia,Riverbank Computing 公司使用 Python 封装了 Qt 研发出 PyQt,而 PyQt 从诞生时就是 GPLv3协议,因此 Nokia 与 Riverbank Computing 谈判,希望将 PyQt 的协议修改为 LGPLv3,可以带来更多的商业用户,但是两个公司谈崩了,所以 Nokia 自己重新研发了 Py 版本的 Qt 也就是 PySide,后来 Nokia 将 Qt 和 PySide 卖给了 Digia 公司,后来在 Digia 公司与开源社区的支持下,目前 Pyside 已经迭代到 PySide6了,对应 PyQt6,注意 PyQt5的对应版本是 PySide2,因为 PySide 推出的比较晚,因此第二代 Pyside 就对齐了 PySide6。对于 Pyside6,由于是官方推出的,并且可以闭源商用。二者的函数接口完全一致,所以文档基本也是可以互相参考,因此还是比较强推 PySide6的。

WxPython

WxPython 是一个流行的跨平台 GUI 工具包。由 Robin Dunn 和 Harri Pasanen 共同开发,它的本质是 wxWidgets(使用 C++编写) 的 Python 包装。相比于 PyQt 模块,WxPython 模块的文档较少,功能相对较弱。

Pygtk

python 对 GTK+GUI 库的封装,在 linux 平台上运行的比较好,需要安装扩展模块,在 windows 下的兼容性有一些问题。

PyQt

推荐 PyQt 的原因

  1. 文档丰富;
  2. 学习成本低,后期迁移成本低;
  3. 开发效率高,开发人员可以使用 Qt-designer 进行拖拽布局;
  4. 开发经验可以迁移到 pyside 进行商业软件开发;

环境搭建

基本环境

  • Windows 11,64 位;
  • Python 3.8.6;

安装 PyQt

直接使用 pip 进行安装,参考文档

pip install PyQt5 
pip install pyqt5-tools

如果下载速度过慢可以使用国内镜像

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

Pycharm 环境配置

Qt Designer 是用于设计和构建图形用户界面的 Qt 工具。它允许使用屏幕上的表单和简单的拖放界面设计控件、对话框或完整的窗口。Qt Designer 使用 XML 格式的 .ui 文件储存 GUI 界面文件,本身不会生成任何代码,.ui 文件可以通过pyuic工具转换为 .py 文件。

这里稍微扩展一下,Qt 框架本身包含 uic utility 可以从 .ui 文件生成 C++代码。其次 Qt 框架还包含 QUiLoader 类,该类可以在应用程序中动态加载 .ui 文件。PyQt 5 只包含了 uic Python 模块,可以动态加载 .ui 文件,也可以将 .ui 文件转换为 .py 文件,pyuic工具本质上是 uic Python 模块的接口,命令格式如下:

pyuic [options] <uifile>

常用选项如下:

  • -p:动态创建并显示 GUI,不会生成 Python 代码;
  • -o <filename>:生成的 Python 代码将输出到指定文件;
  • --version:输出版本号;
  • -i <N>:指定代码缩进格数;
  • -h:将帮助信息输出;

PyQt 5 支持 Qt 的资源系统,用于将起源嵌入到应用程序中,方便分发和打包资源,.qrc 文件是一个资源集合,使用 XML 文件描述存储的资源,用于指定需要被嵌入到应用程序中的资源文件。应用程序会以冒号作为开头,通过资源文件的原始名称引用相应的文件。

为了将 .qrc 文件转换成 .py 文件,需要使用pyrcc 5工具,该工具和 pyuic 工具是一致的,pyrcc5 会读取 .qrc 文件和资源文件,并生成相应的 Python 模块。只需要在应用程序中 import 相应的 Python 资源模块,便可以像使用原始文件一样,使用相应的资源。

综上,为了配置 Pycharm 环境,我们需要配置 3 样东西:

  1. Qt Designer;
  2. Pyuic;
  3. Pyrcc;

Qt Designer

在 Pycharm 中,依次打开 File → Settings → Tools → External Tools,点击 + Create Tool,配置如下:

Name:QtDesigner
Program:D:Python38\Lib\site-packages\PySide2\designer.exe(请根据实际修改)
Working directory: $FileDir$

在这里插入图片描述

Pyuic

在 Pycharm 中,依次打开 File → Settings → Tools → External Tools,点击 + Create Tool,配置如下:

Name: Pyuic
Program: D:\Program Files\Python38\python.exe(请根据实际修改)
Arguments: -m PyQt5.uic.pyuic $FileName$ -o Ui_$FileNameWithoutExtension$.py
Working directory: $FileDir$

在这里插入图片描述

Pyrcc

在 Pycharm 中,依次打开 File → Settings → Tools → External Tools,点击 + Create Tool,配置如下:

Name: PyRCC
Program : D:\Python38\Scripts\pyrcc5.exe(请根据实际修改)
Arguments: $FileName$ -o $FileNameWithoutExtension$_rc.py
Working directory: $FileDir$

在这里插入图片描述

第一个程序

在 Pycharm 中打开 Qt-Designer。

在这里插入图片描述

在左侧控件栏中搜索 Label 控件,将控件拖拽到窗口中间,并更改其中的文字为 hello world,PyQt5。保存文件为 demo 1_helloworld。

在这里插入图片描述

使用pyuic工具将 .ui 文件转换成 .py 文件,输入以下代码:

import sys  
  
from PyQt5.QtWidgets import *  
  
from UI.Ui_demo1_helloworld import Ui_MainWindow  
  
  
# 继承基类和自己写的UI类  
class MainWindow(QMainWindow, Ui_MainWindow):  
    def __init__(self):  
        super(MainWindow, self).__init__()  
        self.setupUi(self)  
  
  
if __name__ == '__main__':  
    app = QApplication(sys.argv)  # 创建APP  
    win = MainWindow()  # 创建主窗口  
    win.show()  # 显示窗口  
    sys.exit(app.exec())  # 程序运行

运行程序,结果如下:

在这里插入图片描述

至此,我们迈出了第一步,完成了第一个 PyQt 程序!!!

文中难免会出现一些描述不当之处(尽管我已反复检查多次),欢迎在留言区指正,相关的知识点也可进行分享,希望大家都能有所收获!!

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

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

相关文章

突破传统开发模式,亚马逊云科技助力中科院加速推动合成生物学

当数字技术成为整个社会运行的底座&#xff0c;生物科学也能借力云计算从诸多繁琐重复的工作中解放出来&#xff0c;专注于生物设计与创新。来看看亚马逊云科技如何与TIBCAS合作&#xff0c;推动合成生物学的发展。 明确核心需求&#xff0c;选择合作伙伴 TIBCAS选择与亚马逊…

供应商管理软件如何选型 好用的供应商管理软件推荐

供应商管理是采购中的重要环节。对于很多企业来说&#xff0c;做好内部供应商管理就能在行业竞争中提升自身的效益与竞争能力&#xff0c;供应商已成为一种战略筹码。 但在企业进行供应商管理过程中&#xff0c;往往会遇到供应商信息数据收集不全、等级划分不合理、绩效评价机…

普通应用访问隐藏API的解决办法

众所周知,在Android9之后,Android系统限制了通过反射的方式访问隐藏Api,这对于系统应用来说或者你拥有系统签名的应用来说,并不是一件难事,但是更多的时候,我们的应用并不是系统应用,而现在通过反射的方式调用也会提示出错,那么这种情况下我们是否还有其他方法能够访问…

kettle利用excel文件增量同步一个库的数据(多表一次增量同步)

利用excel文件增量同步一个库的数据 现在有sqlserver和mysql两个库上的表在进行同步&#xff0c;mysql上的是源表&#xff0c;sqlserver上是目标表。 mysql : sqlserver : 可以看到sqlserver上表的最近一次同步日期分别是 pep表&#xff1a; 2022-10-23 14:19:00.000 stu_…

企业实施CMMI中 常见的4大问题

1. CMMI模型的理解和应用不够深入 CMMI模型是一个复杂的模型&#xff0c;它涉及到许多不同的方面&#xff0c;如组织结构、流程、技术、管理等&#xff0c;因此&#xff0c;要想深入理解和应用CMMI模型&#xff0c;需要花费大量的时间和精力。 企业实施CMMI常见4大问题&#xf…

likeshop单商户SaaS商城系统—无限多开,搭建多个商城

likeshop单商户SaaS商城系统&#xff1a;适用于多开&#xff08;SaaS&#xff09;、B2C、单商户、自营商城场景&#xff0c;完美契合私域流量变现闭环交易使用&#xff0c;系统拥有丰富的营销玩法&#xff0c;强大的分销能力&#xff0c;支持DIY多模板&#xff0c;前后端分离。…

阿里云服务器使用

服务器配置CPU&内存&#xff1a;2核(vCPU)2 GiB操作系统&#xff1a;Ubuntu 22.04 64位运行环境部署因为部署用到了nodejs首先&#xff0c;打开终端&#xff0c;并输入以下命令以安装必要的软件包&#xff1a;sudo apt-get install curl接着&#xff0c;使用 curl 命令安装…

RoFormer: Enhanced Transformer with Rotary Position Embedding论文解读

RoFormer: Enhanced Transformer with Rotary Position Embedding 论文&#xff1a;RoFormer: Enhanced Transformer with Rotary Position Embedding (arxiv.org) 代码&#xff1a;ZhuiyiTechnology/roformer: Rotary Transformer (github.com) 期刊/会议&#xff1a;未发表…

计算机网络原理--传输层协议(TCP协议十大特性)

目录 1.认识TCP协议 TCP的协议段格式 2. 确认应答机制 3.超时重传 4.连接管理 <

Spring的事务传播机制

多个事务方法相互调用时&#xff0c;事务如何在这些方法之间进行传播&#xff0c;Spring中提供了七种不同的传播机制&#xff0c;来保证事务的正常执行&#xff1a; REQUIRED&#xff1a;默认的传播机制&#xff0c;如果存在事务&#xff0c;则支持/加入当前事务&#xff0c;如…

大数据技术架构(组件)35——Spark:Spark Streaming(1)

2.3、Spark Streaming2.3.0、OverviewSpark Streaming 是核心 Spark API 的扩展&#xff0c;它支持实时数据流的可扩展、高吞吐量、容错流处理。数据可以从许多来源&#xff08;如 Kafka、Kinesis 或 TCP 套接字&#xff09;获取&#xff0c;并且可以使用复杂的算法进行处理&am…

jieba+wordcloud 词云分析 202302 QCon 议题 TOP 关键词

效果图 步骤 &#xff08;1&#xff09;依赖 python 库 pip install jieba wordcloud数据 概览 $ head -n 5 input.txt 中国软件技术发展洞察和趋势预测报告 2023 QCon 大会内容策划思路 FinOps&#xff1a;从概念到落地 开源芯片的发展现状、机遇和未来 乐观者前行&#xff0…

Axure 9 实战案例,动态面板的应用 4.1,省市区三级联动下拉菜单(重制简易版)

前言 Hello&#xff01;欢迎来到Axure 9 实战案例教程专栏。 本次课程我们继续来学习一下&#xff0c;动态面板的应用。本篇我们来讲解一下&#xff0c;如何绘制省市区联动下拉菜单&#xff08;重新撰写简易版&#xff09;。 下拉菜单初稿为了节省时间&#xff0c;这里提前把…

vue实现打印浏览器页面功能(两种方法)

推荐使用方法二 方法一&#xff1a;通过npm 安装插件 1&#xff0c;安装 npm install vue-print-nb --save 2&#xff0c;引入 安装好以后在main.js文件中引入 import Print from vue-print-nbVue.use(Print); //注册 3&#xff0c;现在就可以使用了 div id"printTest…

ChatGPT爆火,释放了什么不寻常信号?

ChatGPT&#xff0c;真的火了&#xff01; 相信许多朋友都听说过 ChatGPT&#xff0c;但并不清楚它是个啥。 体制内让ChatGPT写材料&#xff0c;广告行业让ChatGPT写策划案&#xff0c;媒体让ChatGPT写新闻稿&#xff0c;程序员让ChatGPT写代码甚至还带修BUG服务。 可以说是“…

告诉ChatGPT,我想读博了!

告诉ChatGPT&#xff0c;我想读博了&#xff01; 上篇文章详细写了如何体验ChatGPT。在实际使用中发现它对固定模板式的文字工作做的比较好。于是我瞬间想起了毕业前被论文支配的恐惧&#xff0c;我突然有一个大胆的想法&#xff0c;那么ChatGPT是否能帮我写一篇毕业论文呢&am…

【求解器-COPT】COPT的版本更新中,老版本不能覆盖的问题

【求解器-COPT】COPT的版本更新中&#xff0c;老版本不能覆盖的问题方法1方法2如果license还是找不到作者&#xff1a;刘兴禄 参考网址&#xff1a; COPT的下载和配置步骤如下&#xff1a; 教程 | Windows系统下如何安装COPT求解器并配置许可文件&#xff1a; https://zhuan…

山洪灾害监测预警平台 山洪灾害监测预警系统解决方案 以人为本 科学防御

平升电子山洪灾害监测预警平台 山洪灾害监测预警系统解决方案&#xff0c;集信息采集、传输、分析和预警等功能于一体&#xff0c;实现预警信息及时、准确地上传下达&#xff0c;提升监测预警能力&#xff0c;使可能受灾区域能够及时采取措施&#xff0c;最大程度减少人员伤亡和…

典型相关分析与R语言实现

典型相关分析学习目标学习内容典型相关分析的原理典型相关分析的理论内容例子具体实现方法内容小结注意解决方法学习目标 我们所采用的学习内容来自B站的Lizongzhang老师的R语言的学习分享 今天学习的主要内容是关于 典型相关分析 学习内容 首先声明,典型相关分析的内容理解…

性能技术分享|Jmeter+InfluxDB+Grafana搭建性能平台(四)

四、Jmeter配置InfluxDB4.1 后端监听器(BackendListener)介绍1、什么是后端监听器(BackendListener)&#xff1f;源码给出的解释是&#xff1a;BackendListener是一种异步监听并获取到测试结果的实现类。也就是说发出的如http等响应请求的结果&#xff0c;都会被封装在SampleRe…