【PyQt】PyQt学习(一)框架介绍+环境搭建_peaklin脚本pyqt-程序员宅基地

技术标签: python  qt  ui  # PyQt  开发语言  

简介

写在最前面的话

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

  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 程序!!!

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/pcx171/article/details/129016862

智能推荐

Sweets for Everyone!(CF-248D)_stockings mom-程序员宅基地

文章浏览阅读340次。Problem DescriptionFor he knew every Who down in Whoville beneath, Was busy now, hanging a mistletoe wreath. "And they're hanging their stockings!" he snarled with a sneer, "Tomorrow is Christmas! ..._stockings mom

【幻化万千戏红尘】qianfengDay20-java基础学习:数据流、随机读取文件流RandomAccessFile-程序员宅基地

文章浏览阅读189次。课程回顾:流:转换流:字符和字节的转换对象流(Object):序列化,反序列化打印流(Print):打印各种数据类型的数据今日内容:数据流(Data):支持将基本数据类型写出,字节流,处理流1、DataOutputStream:数据输出字节流常用方法:writeXXX:写出基本数据类型的数据writeUTF:写

计算机通天之路第一季:计算机硬件基础_计算机天问之路-程序员宅基地

文章浏览阅读365次。时间:2017-1-6 20:32:07 今天学习了计算硬件基础,从零开始电脑内部主要包括的几个关键1. 电源电源是电脑的供电者,没有电源一切免谈。其质量好坏,决定了电脑各个部件的电压稳定程度,当你玩着玩着就没电了,或者电压不稳,死机了,蓝屏了,你是什么感受? 2. CPU系统的核心,又称中央处理器,相当于计算机的大脑,负责:算数运算,逻辑运算,数据传输。3. 内存全称:内部存储器。特点是:体积_计算机天问之路

Ubuntu安装MySQL时出现E: Unable to locate package mysql-server 的解决方法-程序员宅基地

文章浏览阅读2.3k次,点赞5次,收藏4次。在Ubuntu系统下,利用apt-get install安装MySQL时sudo apt-get install mysql-server出现如下问题:解决的办法:使用命令sudo apt-get update更新软件源sudo apt-get update然后再输入 sudo apt-get install mysql-server 就可以安装了sudo apt-get install mysql-server..._unable to locate package mysql-server

调用超时或找不到服务器,进入某个功能(如:基础档案、填制凭证等)提示:连接超时或数据服务器连接失败...-程序员宅基地

文章浏览阅读89次。用友软件增加明细科目时提示新增会计科目是,提示上级科目已经使用,新增科目将自动改为上级科目的设置已经使用的科目如何增加明细科目在软件操作过程中,经常会遇到对已经使用的科目,要求增加其明细科目的问题。科目已经使用,有两种情形:1、该科目没有期初余额或本期发生数,但在月末转账定义中使用。2、该科目已经有期初余额或本期发生数。下面分别就这两种情形的处理方法,分别进行介绍。情形1:该科目没有期初余额或本期..._调用超时应用集成平台连接异常

东北大学c语言编程及答案,东北大学c语言编程试题及其答案.doc-程序员宅基地

文章浏览阅读730次。东北大学C语言题库第一部分( 选择题 )1、构成C语言的基本单位是________。你的答案是:正确答案是:B过程函数语句命令2、设x为整型变量,不能正确表达数学关系:55<="">x>5&&x<10x==6||x==7||x==8||x==9!(x<=5)&&(x<10)3、在C语言中,逻辑运算符的优先级从高到低的排列顺序为__..._以下有关结构体类型描述正确的是 a.结构体类型的大小为其各成员所占内存的总和b.

随便推点

Airtest从入门到放弃?不要急,这份免费的“超长”攻略请收好!_airtest官网-程序员宅基地

文章浏览阅读1.4k次,点赞5次,收藏12次。此文章来源于项目官方公众号:“AirtestProject”版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途前言不知道你有没有遇到这种情况?在刚接触我们的Airtest项目的时候,总是兴致满满、斗志昂扬;但使用一段时间后,却总是被“找不到图片”、“连不上设备”、“录制的脚本不能运行”这些问题劝退。不要着急,今天我们特意跟同学们分享下当年入坑Airtest的经验;希望看完今天这篇攻略,可以让你在入门Airtest的时候少走一些弯路!1.设备连接篇1)连接Android设备A._airtest官网

【Android】adb+shell - 实现滑动、等待、返回自动化_adb shell 滑动-程序员宅基地

文章浏览阅读2.8k次。adb 模拟手机操作,获取 微信读书 时长 -> 虚荣心漫番刷广告_adb shell 滑动

uipath和python哪个好_UiPath从入门到精通视频教程-程序员宅基地

文章浏览阅读251次。匠厂出品,必属精品 Uipath中文社区qq交流群:465630324uipath中文交流社区:https://uipathbbs.comRPA之家qq群:465620839第一课--UiPath的安装与激活第二课--UiPath设计器介绍第三课--UiPath变量介绍第四课--UiPath条件判断第五课--UiPath循环第六课--UiPath整合流程控制语句第七课--UiPath邮件发送之..._uipath和python哪个好

Doolittle分解法(LU分解法)的Python实现_杜立特尔三角分解法python-程序员宅基地

文章浏览阅读7.2k次,点赞8次,收藏17次。在解一般的非奇异矩阵线性方程组的时候,或者在迭代改善算法中,需要使用LU分解法。对于一个一般的非奇异矩阵A=(a11, a12,…,a1n,a21,…ann),可分解为一个下三角矩阵L和一个上三角矩阵U。其中L的主对角线元素都是1.希望得到一个M,最后在需要的时候将M拆分为L和UM=[[u11 u12 u13 ...... u1n l21 u22 u23 ...... u2n ..._杜立特尔三角分解法python

python关键词统计_Python3 利用openpyxl 以及jieba 对帖子进行关键词抽取 ——对抽取的关键词进行词频统计...-程序员宅基地

文章浏览阅读384次。Python3 利用openpyxl 以及jieba 对帖子进行关键词抽取 ——对抽取的关键词进行词频统计20180413学习笔记一、工作前天在对帖子的关键词抽取存储后,发现一个问题。我似乎将每个关键词都存到分离的cell中,这样在最后统计总词频的时候,比较不好处理。于是,上回的那种样式:是不行的,应该把它们放到同一列(行)中,组装成一个list或tuple再进行词频统计。1.读取输出文件“t1..._openpyxl如何关键字出现计数

python在数据分析方面的应用、下列说法正确_智慧树知到大数据分析的python基础答案...-程序员宅基地

文章浏览阅读1.8k次。智慧树知到大数据分析的python基础答案在派生类中可以通过 “ 基类名 . 方法名 ()” 的方式来调用基类中的方法 .下面代码的执行结果是 : ( ) a = 10.99 print( complex(a))numpy 中求最大值方法是: ( )下面代码的输出结果是 : ( ) vlist = list( range(5)) print( vlist)计算numpy中元素个数的方法是: ( ..._关于python在数据分析方面的应用,以下说法正确的是哪些选项