PYQT5学习笔记02——程序基本结构之面向对象版本

news2024/12/22 19:56:23

  我们之前写的代码耦合性比较高,复用性不高,这是面向过程编程的缺点。我们可以把程序基本结构设计成面向对象的版本,把 设置控件这部分内容封装到一个类中。

在这里插入图片描述

  比如这个是我们的窗口,红色的矩形是相同的菜单控件,既然是一模一样的,那我们就给他给抽取出来,当成一个类,方便复用。如果需要修改这个菜单控件的话,我们只需要在类里面修改代码,不用在具体的GUI文件中修改代码。

  原来的面向过程代码如下:

# -*- coding: UTF-8 -*-
# 0.导入需要的包
from PyQt5.Qt import *
import sys

# 0.导入需要的包
from PyQt5.Qt import *
import sys


# 1、创建一个应用程序对象
app = QApplication(sys.argv)  # app自己创建的当前文件的局部变量

# 2、控件的操作
# 1、创建控件
window = QWidget()  # 创建一个空白窗口

# 2、设置控件
window.setWindowTitle("封装菜单栏的学习")  # 设置窗口标题
window.resize(500, 500)  # 设置窗口大小

label = QLabel(window)  # 创建标签子控件
label.setText("xxxx")  # 设置标签文本

# 3、展示控件
window.show()  # 将窗口展示出来

# 3、开始执行应用程序,并进入消息循环
sys.exit(app.exec_())

  我们可以把 设置控件这部分内容抽象出来,封装成一个Window类,这个类继承 QWidget 父类,设置样式和子控件的代码全部封装在Window类的初始化方法中,封装的Window类如下:

class Window(QWidget):  # 创建一个类,并且继承QWidget这个父类,用来自定义样式
    def __init__(self):
        super().__init__()  # 调用父类的初始化方法(因为子类重写了init方法,所以父类的被隐藏了,需要显示调用)
        self.setWindowTitle("封装菜单栏的学习")  # 设置子类的标题
        self.resize(500, 500)  # 设置子类的窗口大小
        self.setup_ui()

    def setup_ui(self):  # 增加子控件
        label = QLabel(self)
        label.setText("xxxx")

  我们把设置子控件的代码封装在一个实例方法中,初始化方法单独放设置样式的代码,想添加子控件的时候,只需在初始化方法中调用setup_ui实例方法即可。

  面向对象的程序结构如下:

# -*- coding: UTF-8 -*-
# 0.导入需要的包
from PyQt5.Qt import *
import sys
from Menu import Window


# 1、创建一个应用程序对象
app = QApplication(sys.argv)  # app自己创建的当前文件的局部变量

# 2、控件的操作
# 1、创建控件
window = Window()  # 创建一个空白窗口

# 2、设置控件



# 3、展示控件
window.show()  # 将窗口展示出来

# 3、开始执行应用程序,并进入消息循环
sys.exit(app.exec_())

  根据这种思想,我们还可以对其他的控件结构进行封装,此处不在过多说明。

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

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

相关文章

研报精选230420

目录 【行业230420浙商证券】卫浴行业深度报告:智能卫浴新变局,国货崛起正当时 【行业230420平安证券】氢能全景图(上)制氢篇:商业模式起步,绿氢初试锋芒 【行业230420天风证券】建筑装饰行业深度研究&…

InstructGPT:Training language models to follow instrcutions with human feedback

InstructGPT:Training language models to follow instrcutions with human feedback 介绍模型数据集TaskHuman data collectionmodel 实验结果参考 介绍 现在LLM可以被prompt来完成一系列的下游任务,然而这些模型也总会产生一些用户不想要的结果&#…

ESP32 WiFi扫描、WiFi通道查询

ESP32WiFi扫描程序 代码解决什么问题? 扫描周围WiFi并识别指定WiFi名称的WiFi通道(为了ESP32的esp-now协议正常通信)。 这跟ESP32 now有什么关系? ESP32使用NOW协议进行通信时,要求参与通信的设备必须处于同一物理…

ASEMI代理ADI亚德诺AD8603AUJZ-REEL7车规级芯片

编辑-Z AD8603AUJZ-REEL7芯片参数: 型号:AD8603AUJZ-REEL7 偏移电压:12μV 偏移电压漂移:1μV/C 输入偏置电流:0.2 pA 输入失调电流:0.1 pA 输入电压范围:–0.3 to 5.2V 输入电容&#…

Win10+VS2019安装vcpkg

vcpkg是一个C的包管理器。类似Python中的pip。安装后可以直接通过命令下载一些C的包,省的自己编译配路径。安装后的包都被vcpkg统一保存,统一配置路径。VS中哪个项目需要,就将其配置到某个项目中,当然也可以全局配置。 1、下载vc…

Node 04-http模块

HTTP 协议 概念 HTTP(hypertext transport protocol)协议;中文叫 超文本传输协议 是一种基于TCP/IP的应用层通信协议 这个协议详细规定了 浏览器 和 万维网 服务器 之间互相通信的规则 协议中主要规定了两个方面的内容: 客户端&#xff1…

Coovally再升级!基于CV大模型的智能标注解放你的双手

近日,随着SAM大模型的横空出世,“分割一切”成为可能,基于CV大模型的标注技术受到瞩目。 SAM分割示例 SAM大模型 Meta 在论文中发布了名为 Segment Anything Model (SAM)的新模型,“SAM 已经学会了关于物体的一般概念&#xff0c…

Hbase1.1:HBase官网、HBase定义、HBase结构、HBase依赖框架、HBase整合框架

这里写自定义目录标题 HBase官网HBase特点:大HBase定义HBase结构HBase依赖框架hadoop HBase整合框架PhoenixHive HBase官网 Hbase官网地址 HBase是Hadoop database,一个分布式、可扩展的大数据存储。 当您需要对大数据进行随机、实时读/写访问时&…

Activiti学习03

这里写目录标题 一、开发环境1.1 Java环境1.2 数据库1.3 开发工具 二、Activiti入门体验2.1 新建项目2.2 pom.xml文件2.3 activiti.cfg.xml文件2.4 添加日志配置文件 三、创建数据库3.1 创建数据库3.2 执行代码3.2.1 通过代码实现创建表格3.2.2 简化代码 四、绘制流程4.1 新建b…

香港金银业贸易场十大会员名单排行榜

在种类丰富全面的国际投资市场中,黄金拥有者良好的受众基础,黄金投资产品有着悠久的历史记录和蓬勃旺盛的生命力,数百年以来无数炒金者在黄金投资中实现了投资理财的梦想,但是在黄金投资的过程中,投资中需要面对无数考…

162.网络安全渗透测试—[Cobalt Strike系列]—[Veil免杀]

文章目录 1 Veil的使用2 生成有效载荷payload3 Veil免杀过程4 测试免杀 1 Veil的使用 (1)Veil主要用于生成:免杀payload (2)下载地址:https://github.com/Veil-Framework/Veil (3&#xff09…

Unity 工具控件 之 Text 文本字间距调整(老版本的Unity编写工具控件/新版本Unity使用TMP)

Unity 工具控件 之 Text 文本字间距调整(老版本的Unity编写工具控件/新版本Unity使用TMP) 目录 Unity 工具控件 之 Text 文本字间距调整(老版本的Unity编写工具控件/新版本Unity使用TMP) 一、简单介绍 二、老版本 Unity Text 使用工具控件调整行间距 三、新版本 Unity Text…

mysql性能调优开篇介绍、错误代码总结(处理方法)和参数文件详解(持续更新中ing)

前言 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系…

园区路线地图指引图怎么画?园区地图三维图怎么画?

目前在园区信息化应用形式中,广泛缺乏专业电子地图的使用,因此,使这种高效的信息化工具的应用受到了很大限制。有些仅以图片代替,但图片没有空间计算、检索、路径设计的能力,在地图应用形式中,使用价值很低…

一文!解决恒定磁场的基本方程(有介质)

目录 引言 磁化过程 磁偶极矩 磁化强度 方程的化简 磁场强度 磁化率 磁导率 相对磁导率 现实生活中的应用 引言 为什么介质在磁场中会被磁化呢? 首先因为电子绕着原子核转动,所以就可以形成一个环形电流,,环形电流就可以产生磁场。…

SAR型ADC结构原理

SAR型 ADC,即逐次渐进逼近型 ADC,采用的是多次比较的方式来获得最终的输出结果,具有简单易用,功耗低的特点。下图这个结构可以帮助我们容易地理解SAR型 ADC的工作过程: 如上图,假设输入信号的伪代码为 45&…

YOLOv5+单目测距(python)

YOLOv5单目测距(python) 1. 相关配置2. 测距原理3. 相机标定3.1:标定方法13.2:标定方法2 4. 相机测距4.1 测距添加4.2 细节修改(可忽略)4.3 主代码 5. 实验效果 相关链接 1. YOLOV7 单目测距(p…

今晚直播 | 思码逸陆春蕊:面对研发效能度量落地难点,如何让数据说话?

本期分享 本期 DevData Talks 邀请到了思码逸高级咨询专家陆春蕊老师。陆春蕊老师曾就职于 Oracle 美国,在软件质量、项目管理方面有着丰富的经验。在研发效能领域为上百家客户提供了技术、数据分析、实践落地等方面的咨询,协助客户提升研发效能10%-30%…

Revit问题:墙体被楼板剪切及材质库被锁定问题

一、Revit 墙体被楼板剪切怎么办? 建模的时候画的墙总是到楼板就停了,这是为什么?明明顶部约束到标高2了,这种情况如何解决? 首先来分析问题产生的原因是,我们在绘制楼板的时候选择了用楼板剪切重复部分的墙体。 解决…

junit的基本使用

1 依赖引入&#xff1a; 只需要在maven项目中引入&#xff1a; <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version> </dependency> 2 常用注解 Test Before after BeforeClass…