【Python】PyQt5入门
创始人
2025-05-31 18:17:22
0

文章目录

  • 0 前言
  • 1 PyQt5及其基本模块
  • 2 开发方式
  • 3 UI界面设计(Qt Designer)
  • 4 逻辑代码的基本结构
  • 5 常用控件及其使用方法
  • 6 参考链接

0 前言

  最近接了一个小项目,主要任务是完成一个界面的设计,而且是基于Python,我第一反应就是使用大名鼎鼎的Qt来设计。Qt最早是用C语言开发的,但是后来也有了基于Python的第三方包,目前最新版是PyQt6.3,但是这个项目中使用的还是普及度更高的PyQt5。正好我也比较喜欢Python编程,于是边学边做,简单总结一些入门要点,授人与渔。

在此特别感谢Chat-GPT的帮助!真的是编程的利器!

1 PyQt5及其基本模块

  要使用PyQt5,首先需要进行安装:pip install PyQt5,如果想要尝鲜也可以安装PyQt6:pip install PyQt6
  PyQt5主要有三个部分:【摘抄自网上】

  • QtCore: 包含了核心的非GUI的功能。主要和时间、文件与文件夹、各种数据、模型、流、URLs、mime类文件、进程与线程一起使用。
  • QtGui: 包含了窗口系统、事件处理、2D图像、基本绘画、字体和文字类
  • QtWidgets: 包含了一些创建桌面的UI元素和控件

  了解包的结构还是非常有必要的,这样在看别人代码时能够有一个比较清晰的认识,也能快速定位到使用的包所在的位置。一般导入某个具体的类时会使用如下所示的import方式:

from PyQt5.QtWidgets import xxxx,xxxx
from PyQt5.QtGui import xxxxx,xxxx
from PyQt5.QtCore import xxxxxx,xxxxx

2 开发方式

  如果是用C++开发Qt,那必须得下载一个Qt Creator,来实现代码和界面进行关联,使开发过程更加便捷。但是用PyQt5的Python第三方包来开发,只需要下载一个Qt Designer用来设计UI界面即可。

  不过Qt Designer似乎不能通过下载一个执行程序来进行安装,而是通过下载第三方包的方式来下载。这里一般有两种方式。

  • PyQt5-Tools: 运行上面的提到的安装PyQt5的命令pip install PyQt5会自动安装sip(具体是啥有啥功能不太清楚),但不会自动安装Qt Designer,需要再安装PyQt5-Tools:pip install PyQt5-Tools,然后在Python对应版本的site-packages文件夹下面可以找到designer.exe文件,即Qt Designer。

  • PySide2: 除了安装PyQt5-Tools外,还可以安装PySide2这个包,就自带了Qt Designer这个软件,我采用的就是这种方式。和上面一样,也可以在Python的site-packages文件夹下找到,如下图所示。
    在这里插入图片描述

PySide2和PyQt之间的兼容性据说不错,它们之间的关系可以在网上找到很多比较详细的叙述。

  因此实际开发项目时,是使用Qt Designer来设计UI界面,得到一个.ui的文件,然后利用PyQt5安装时自带的工具pyuic5将.ui文件转换为.py文件:

pyuic5 -o mywindow.py mywindow.ui #先是py文件名,再是ui文件名

当然,如果是使用VS Code写代码,也可以考虑安装一个插件,帮助你执行这行命令。

在这里插入图片描述

在这里插入图片描述

之后再新开一个py文件,进行逻辑编写,这样实现了界面与逻辑分离,代码结构更加清晰。如下图所示是一般项目的结构:
在这里插入图片描述

虽然网上有很多都是上来就写代码运行得到窗口的教程,但是个人建议初学者还是先使用软件设计好UI文件,再转换成代码的方式,这样更加直观,而且调整控件位置也更方便。

  综上所述,PyQt5的开发主要是两个核心:ui界面的设计逻辑代码的编写。前者主要是会玩Qt Designer这个软件即可;后者理清楚代码结构也不是很难。

3 UI界面设计(Qt Designer)

  先来看看ui界面怎么玩:打开Qt Designer,点击新建,会弹出一个窗口:
在这里插入图片描述

这里一般是选择Main Window或者Widget,其中Main Window继承自Widget,添加了一些内容,本质二者差不多。这里选择的是Widget。
  建好文件后,得到一个空白页面,接下来就是往里面拖动控件并设计样式了,如下图所示。
在这里插入图片描述

这部分内容过于琐碎,这里只记录一些要点,后续随缘更新,遇到问题建议点对点搜索。

  • Layout部分的控件主要用于设置布局,即实现当窗口拖动时,控件的大小也会随之改变,而且可以利用布局控件设计各控件所占窗口大小的比例。
  • Containers部分的控件都可以设置布局,而且**只有设置布局才能实现控件随窗口大小变化而变化!**这一点需要注意。
  • 设置布局之后想要实现控件居左或居右怎么办呢?那就用弹簧吧(Spacer)

4 逻辑代码的基本结构

  要想写好逻辑代码,首先要清楚它的基本结构。
  前面提到,除ui界面代码,还需要有一个逻辑代码,而逻辑代码个人感觉使用类的形式来组织更加方便,也更优雅。还记得创建ui时选择的类吗?是Widget还是Main Window,逻辑代码类最好是继承这个这个类,即QWidgetQMainWindow。一般的代码结构如下所示。

# 先导入主要的三个模块和各自内部常用的类
from PyQt5 import QtCore, QtWidgets, QtGui
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QColor
# 再导入设计的ui界面转换成的py文件
from Ui_window import Ui_Formclass mywindow(QWidget): #这里一定要继承QWidget类或者是QMainWindow类'''初始化函数'''def __init__(self) -> None:super().__init__() #先初始化父类【必须】self.ui = Ui_Form()self.ui.setupUi(self) #这个函数本身需要传递一个QWidget类,而该类本身就继承了这个,所以可以直接传入self(这就是继承的好处)'''按钮连接的槽函数'''@pyqtSlot() #装饰器,表示该函数是按名称自动被连接def on_pushButton_clicked(self):print("Pressed the pushButton")if __name__ ==  "__main__":# 这里的代码逻辑基本相同app = QApplication([]) #先建立一个appwid = mywindow() #初始化一个对象,调用init函数,已加载设计的ui文件wid.show() #显示这个uiapp.exec_() #执行app(运行界面,响应按钮等操作)

这里有一个需要注意,那就是按钮连接的槽函数,这里没有调用connect函数,而是使用了@pyqtSlot()这个装饰器,但前提就是要求函数命名要按照规则来:on_(控件对象名)_信号名(self,内置参数)。此外,想实现这个功能,还需要打开一个开关,这句代码默认在ui界面文件中就有,如下图所示。

在这里插入图片描述

5 常用控件及其使用方法

这部分内容过于琐碎,后续随缘更新,个人建议拿不准先问问Chat-GPT怎么说😅

6 参考链接

  • Qt Widgets C++ Classes
    这是C++语言中的一个类列表,但同样适用于Python编程,可以查看类中有哪些函数

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...