首页 > 编程语言 >PyQt5学习之路一:python与QT搭配,实现UI设计与业务逻辑层分离

PyQt5学习之路一:python与QT搭配,实现UI设计与业务逻辑层分离

时间:2024-07-13 15:00:59浏览次数:14  
标签:widget QT python self PyQt5 窗体 ui

一、Python安装

1.下载Python

python官网链接如下:
链接: https://www.python.org/在这里插入图片描述
根据图中提示选择需要的python版本,下载并安装

二、QT安装

1.下载QT

Qt官网链接如下:
链接: https://www.qt.io/
下载社区版QT就可以
在这里插入图片描述

三、PyQt5的安装

1.PyQt5简介

python语言最为排行第一的编程语言,功能十分强大,但自带的Tkinter功能很弱,难以开发出专业的GUI。python语言的开放性决定了可以将其他语言的类库封装为Python绑定,QT作为C++ GUI类库,结合就成为了PyQt。
PyQt5是对应QT5类库
通过以下命令安装PyQt5
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple PyQt5

2.PyQt5相关的可执行程序

PyQt5安装完成后可python安装的目录Scripts中增加pylupdate5.exe、pyrcc5.exe、pyuic5.exe.这3个可执行程序的作用如下:

  • pyuic5:可将QtDesigner可视化设计的界面文件(ui文件)转换为python程序文件.
  • pyrcc5:可将QtCreator的资源文件(qrc文件)转换为python程序文件.
  • pylupdate5:用于多语言设计时,编辑语言资源文件的工具软件.
    备注:将Scripts添加到Windows的PATH的环境变量里.

3.卸载PyQt5

pip3 uninstall PyQt5

四、python和Qt结合实现UI设计与逻辑层分离

1.首先通过QtCreator创建UI界面.

常用模版如下:

  • Dialog:基于QDiaglog类的窗体.
  • Main Window模板, 基于QMainWindow类的窗体, 具有主窗口的特性, 窗口上有主菜单栏、 工具栏、 状态栏等.
  • Widget模板, 基于QWidget类的窗体。QWidget类是所有界面组件的基类, 如QLabel、 QPushButton等界面组件都是从QWidget 类继承而来的.
    操作步骤:文件→Newproject→Application(Qt)→Qt Widgets Application→选择,进入如下界面
    名称:想要创建的项目名称
    创建路径:可修改指定为自己定义的路径
    备注:设为默认路径勾选的效果是,下次创建新的项目,在此路径下创建
    在这里插入图片描述
    设置名称为demo1后,选择下一步,构建系统选择CMake,继续下一步,此时进入如下界面,选择Base class为QWidget
    在这里插入图片描述
    之后选择系统给定的默认选项,创建成功,demo1的项目目录如下
    在这里插入图片描述
    双击widget.ui进入QtDesigner,编辑UI,为UI增加checkBox,pushButton,plainTextEdit等,效果图如下
    在这里插入图片描述
    以上,通过QtCreator完成了对工具的UI设计

2.通过可执行文件将UI转化为Python文件

以下是demo1的目录,这是已经转换完成的结果,开始时应只有demo1这个文件夹
在这里插入图片描述

  • 首先创建一个名称问uic.txt的文件

  • 在uic.txt文件中输入以下内容

     echo off
     rem 将子目录Qtapp下的ui文件复制到当前目录下
     copy .\demo1\widget.ui widget.ui
    
     rem 用pyuic5编译.ui文件
     pyuic5 -o ui_widget.py widget.ui
     
     pause
    
  • 注意copy .\demo1\widget.ui widget.ui中demo1是对应的Qt的项目目录,widget.ui是新创建的ui文件,注意要与demo1文件夹中的文件名保持一致

  • 之后将uic.txt后缀修改为.bat文件

  • 运行uic.bat,生成 ui_widget.py及为编译转换python的文件
    在这里插入图片描述
    新建一个名为myWidget.py的文件
    ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/2e3d7c62a7ea454a9fd2c5f6d87a731a.png在这里插入图片描述

导入ui_widget.py中的类Ui_Widget,使用单继承的方式定义QmyWidget,这个类为窗体的业务逻辑类,它的父类为Qwidget,在这个类的构造函数中,首先使用supper()获取父类Qwidget,并执行父类的构造函数,代码是:

	super(QmyWidget,self).__init__()

这样self就是一个Qwidget的对象,显示的创建一个Ui_Widget类的私有属性self.__ui,即

    self.ui = Ui_Widget()
    self.ui.setupUi(self)

私有属性self.__ui包含了可视化设计的UI窗体上的所有组件,只有通过self.ui才可以访问窗体上的组件,包括调用其创建界面组件的setupUi()函数,因为由于self ui 是QmyWidget类的私有属性, 在应用程序中创建的QmyWidget 对象,myWidget不能直接访问myWidget.__ui, 也就无法直接访问窗体上的界面组件。为了访问窗体上的组件, 可以在 QmyWidget类里定义接口函数, 例如函数设置窗体上按钮的文字。在应用程序里创建QmyWidget对象的实例myWidget,通过调用函数间接修改界面上按钮的文字.

总结

仔细观察和分析这种单继承的方式, 发现它有如下特点。

  1. 可视化设计的窗体对象被定义为QmyWidget类的一个私有属性self._ui, 在QmyWidget类的内部对窗体上的组件的访问都通过这个属性实现, 而外部无法直接访问窗体上的对象, 这更符合面向对象封装隔离的设计思想

  2. 窗体上的组件不会与QmyWidget里定义的属性混淆

  3. 可以定义界面对象为公共属性, 即创建界面对象时用下面的语句

    self. ui=Ui_Widget () 
    self.ui.setupUi(self)
    

通过这种单继承的方式,可以更好的实现业务逻辑与UI设计的分离.

标签:widget,QT,python,self,PyQt5,窗体,ui
From: https://blog.csdn.net/weixin_44955553/article/details/140084884

相关文章

  • 【Python实战项目】用Python制作游戏—pygame超级玛丽!游戏开发
    1、需求分析具备功能播放与停止背景音乐随机生成管道与导弹障碍显示积分跳跃躲避障碍碰撞障碍2、游戏功能结构玛丽冒险的功能结构主要分为三类,分别为音效、主窗体以及随机出现的障碍物。如下图3、游戏业务流程根据该游戏的需求分析以及功能结构##-、游戏预览......
  • 用Python生成一个漂亮的圣诞节词云
    展示效果代码#-*-coding:UTF-8-*-importjiebaimportrefromstylecloudimportgen_stylecloudfromPILimportImageimportnumpyasnpwithopen('./圣诞素材/Christmas.txt',encoding="utf-8")asf:data=f.read()#文本预处理去除一些无用的字符......
  • 全栈物联网项目:结合 C/C++、Python、Node.js 和 React 开发智能温控系统(附代码示例)
    1.项目概述本文详细介绍了一个基于STM32微控制器和AWSIoT云平台的智能温控器项目。该项目旨在实现远程温度监控和控制,具有以下主要特点:使用STM32F103微控制器作为主控芯片,负责数据采集、处理和控制逻辑采用DHT22数字温湿度传感器,精确采集环境温湿度数据通过ESP8266WiF......
  • 全网最适合入门的面向对象编程教程:16 类和对象的Python实现-多态、方法重写与开闭原则
    全网最适合入门的面向对象编程教程:16类和对象的Python实现-多态、方法重写与开闭原则摘要:本文主要介绍了Python中创建自定义类时子类如何实现对父类方法的重写、方法重写的定义和多态的基本概念,并对开闭原则进行介绍。原文链接:FreakStudio的博客往期推荐:学嵌入式的你,......
  • 【华为OD】D卷真题100分:阿里巴巴找黄金宝箱(III) python代码实现[思路+代码]
    【华为OD】2024年C、D卷真题集:最新的真题集题库C/C++/Java/python/JavaScript【华为OD】2024年C、D卷真题集:最新的真题集题库C/C++/Java/python/JavaScript-CSDN博客Java、JS、python、C、C++代码实现:【华为OD】D卷真题100分:阿里巴巴找黄金宝箱(III)Java代码实现[思路+代......
  • [python][whl]causal-conv1d的python模块在windows上whl文件下载
    【模块介绍】causal-conv1d,即因果一维卷积(Causal1DConvolution),是一种在深度学习特别是时序数据处理中广泛应用的卷积技术。它主要特点在于其“因果性”,即输出的每个元素仅依赖于输入序列中它之前的元素,而不考虑未来的输入。这种特性使得因果一维卷积在处理如语音处理、时间......
  • 【Qt Designer用Frame设置背景图片】不影响其它组件小技巧,控件层级设置,组件的继承
    QtDesigner用Frame设置背景图片、颜色不影响其它组件小技巧,控件层级设置,组件的继承在设置背景时,遇到一个问题,例如用frame当最后一层设置背景,加载资源图片后,会使frame内部组件继承相同格式,很麻烦。原语句用法border-image:url(:/images/login.png);内部组件会出现父......
  • 【PyQt5连接Mysql】python连接成功记录(版本对应)-最新
    在做一个qt登陆注册界面时,不得不使用数据库的连接,但是一直连接失败,记录一下个人成功解决的方法,希望能帮到各位。我的版本为Qt5VersionNumberis:5.15.2,PyQt5Versionis:5.15.10,Mysql8.0。参考:①PyCharm+PyQt5(5.15.2)+mysql,PyQt5连接mysql,踩坑与解决办法②PyQt5连......
  • 可视化课设总结(星巴克网页爬取信息,百度地图网页版爬取信息,百度地图api,pyecharts库,pyth
    一、引言       本博客是本人是基于本人可视化课设所做的总结,其中有些过程的实现可能并不是最优的实现方法,有些实现效果也因为本人的实力有限,并不能达到预期的效果,所以也欢迎大家指点和改良。(刚考完期末回家,终于有时间把这个课设写个博客了,虽然这课设是明天截至的,我今......
  • python制作甘特图的基本知识(附Demo)
    目录前言1.matplotlib2.plotly前言甘特图是一种常见的项目管理工具,用于表示项目任务的时间进度直观地看到项目的各个任务在时间上的分布和进度常用的绘制甘特图的工具是matplotlib和plotly主要以Demo的形式展示1.matplotlib功能强大的绘图库,适合制作静态......