PyQt 界面编程:QDialog、QWidget、QMainWindow 的面向过程与面向对象编程

文章目录

  • 一、PyQt简介
  • 二、面向过程编程
  • 三、面向对象编程(推荐)
    • 3.1 QWidget窗口
    • 3.2 QMainWindow窗口
    • 3.3 QDialog窗口

文档: https://www.riverbankcomputing.com/static/Docs/PyQt5/

一、PyQt简介

PyQt简介:PyQt 是一个用于创建图形用户界面(GUI)的 Python 库,它将 Qt 应用程序框架与 Python 语言结合。Qt 是一个功能强大的跨平台 C++ 库,广泛用于开发桌面、移动和嵌入式应用程序。PyQt 允许开发者利用 Qt 的强大功能,同时使用 Python 的简洁语法.

窗口分类:PyQt中常用的三种窗口分别是QDialogQWidgetQMainWindow。它们分别用于不同的场景和需求。以下是它们的详细介绍与区别:

窗口类型介绍特点应用场景
QWidget是 PyQt 中所有用户界面对象的基类,它是其他窗口类(如 QDialog 和 QMainWindow)的父类。QWidget 可以作为一个独立的窗口,也可以作为其他窗口的子部件轻量级:适合简单的窗口或自定义组件;
灵活性:可以作为主窗口、对话框或嵌入其他窗口;
无预设布局:需要手动设置布局和组件。
简单的自定义窗口。
作为其他窗口的子部件(如面板、控件容器)
QDialog用于对话框的窗口类,通常用于弹出窗口,例如设置对话框、消息框等。QDialog 可以是模态(阻塞主窗口)或非模态(不阻塞主窗口)对话框特性:适合短期的用户交互;
模态支持:可以设置为模态对话框(exec_())或非模态对话框(show());
预设按钮:支持 Ok、Cancel 等标准按钮。
弹出对话框(如设置、登录、消息提示)
需要用户输入或确认的临时窗口
QMainWindow(推荐)是用于主应用程序窗口的类,通常用于复杂的应用程序界面。它提供了菜单栏、工具栏、状态栏和中心窗口区域等标准组件主窗口特性:适合复杂的应用程序;
内置布局:支持菜单栏、工具栏、状态栏和中心部件;
可扩展性:可以添加多个子窗口或自定义组件
主应用程序窗口(如文本编辑器、IDE)
需要菜单栏、工具栏等标准组件的窗口。

编程方式:PyQt主要包括面向过程编程面向对象编程是两种常见的编程方式。它们各有特点,适用于不同的开发场景。以下是它们的详细介绍与应用场景:

方式介绍特点场景
面向过程编程是一种以过程(函数)为中心的编程方式,代码逻辑通过一系列函数调用来实现。在 PyQt 中,面向过程编程通常用于简单的应用程序或快速原型开发代码简单直接:适合小型程序或快速实现功能;
逻辑集中在函数中:通过函数调用来完成界面创建和事件处理;
不易维护:随着程序规模增大,代码可能变得难以维护和扩展。
小型工具:功能简单、代码量少的应用程序;
快速原型:需要快速验证想法或功能的场景;
学习与实验:初学者学习 PyQt 的基本用法
面向对象编程(推荐)是一种以对象为中心的编程方式,通过类和对象来组织代码。在 PyQt 中,面向对象编程是推荐的方式,适合中大型应用程序开发代码结构清晰:通过类和对象组织代码,易于维护和扩展;
封装性:将界面和逻辑封装在类中,提高代码复用性;
适合复杂应用:适合需要模块化和可扩展性的应用程序
中大型应用程序:功能复杂、需要模块化设计的项目;
可扩展性要求高:需要频繁添加新功能或修改现有功能;
团队协作:代码结构清晰,便于多人协作开发

推荐:PyQt编程中,推荐使用QMainWindow窗口类型,采用面向对象编程方式,利用UI与逻辑分离形式(即UI与逻辑做两个类或文件分开保存)

二、面向过程编程

QWidget

from PyQt5.QtWidgets import QWidget, QApplication, QPushButton, QVBoxLayout
import sys# 按钮事件
def click_btn():print("点击了按钮")app = QApplication(sys.argv)
# 创建QWidget窗口及初始化
window = QWidget()
window.setWindowTitle('标题')
window.resize(400, 400)
# 创建布局及加入界面
layout = QVBoxLayout()
window.setLayout(layout)
# 创建控件及加入布局中
btn = QPushButton("按钮")
btn.clicked.connect(click_btn)   # 按钮绑定函数
layout.addWidget(btn)
# 界面展示
window.show()
sys.exit(app.exec_())

QMainWindow:QMainWindow窗口没有布局管理器,通常需要借助QWidget窗口作为其中心部件(或QDialog,推荐QWidget)

from PyQt5.QtWidgets import QWidget, QMainWindow, QApplication, QPushButton, QVBoxLayout
import sys# 按钮事件
def click_btn():print("点击了按钮")app = QApplication(sys.argv)
# 创建QMainWindow窗口及初始化
window = 

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

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

相关文章

Jvascript网页设计案例:通过js实现一款密码强度检测,适用于等保测评整改

本文目录 前言功能预览样式特点总结:1. 整体视觉风格2. 密码输入框设计3. 强度指示条4. 结果文本与原因说明 功能特点总结:1. 密码强度检测2. 实时反馈机制3. 详细原因说明4. 视觉提示5. 交互体验优化 密码强度检测逻辑Html代码Javascript代码 前言 能满…

智能车摄像头开源—8 元素处理

目录 一、前言 二、无元素状态 三、直线与弯道 四、十字与环岛 1、十字识别处理 2、环岛识别处理 五、坡道 六、障碍物 七、斑马线 八、入库 九、出界停车 一、前言 在写这篇文章之前,考虑了很久到底该写到什么程度,但思来想去,不同…

微信服务号推送消息

这里如果 没有 就需要点新的功能去申请一下 申请成功之后就可以设置模版消息 推送到用户接受的页面是 需要后端调用接口 传递token 发送给客户

matlab汽车动力学半车垂向振动模型

1、内容简介 matlab141-半车垂向振动模型 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略

1-10 github注册仓库

如何在github中注册一个仓库? 1.0 注册仓库 1-1 GitHub的账号注册教程_github注册-CSDN博客 2.0 删除仓库 1-2 从github中删除创建的仓库_github删除仓库-CSDN博客 3.0 创建仓库 1-3 【教程】GitHub新建仓库新手教程_github仓库-CSDN博客 4.0 github操作 1-4 1-9 克…

EasyRTC智能硬件:小体积,大能量,开启音视频互动新体验

在万物互联的时代,智能硬件正以前所未有的速度融入我们的生活。然而,受限于硬件性能和网络环境,许多智能硬件在音视频互动体验上仍存在延迟高、卡顿、回声等问题,严重影响了用户的使用体验。 EasyRTC智能硬件,凭借其强…

PHP 面向对象编程

PHP 学习资料 PHP 学习资料 PHP 学习资料 在 PHP 编程领域,面向对象编程(OOP)是一种强大的编程范式,它提供了更高效的代码组织和复用方式,使程序的结构更清晰、易维护。接下来,我们将深入探讨 PHP 面向对…

2021年全国研究生数学建模竞赛华为杯E题信号干扰下的超宽带(UWB)精确定位问题求解全过程文档及程序

2021年全国研究生数学建模竞赛华为杯 E题 信号干扰下的超宽带(UWB)精确定位问题 原题再现: 一、背景   UWB(Ultra-Wideband)技术也被称之为“超宽带”,又称之为脉冲无线电技术。这是一种无需任何载波,通过发送纳秒…

matlab飞行姿态pid控制

1、内容简介 matlab139-飞行姿态pid控制 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略

easyexcel快速使用

1.easyexcel EasyExcel是一个基于ava的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel 即通过java完成对excel的读写操作&#xff0c; 上传下载 2.easyexcel写操作 把java类中的对象写入到excel表格中 步骤 1.引入依赖 <depen…

网络基础 【UDP、TCP】

1.UDP 首先我们学习UDP和TCP协议 要从这三个问题入手 1.报头和有效载荷如何分离、有效载荷如何交付给上一层的协议&#xff1f;2.认识报头3.学习该协议周边的问题 UDP报头 UDP我们先从示意图来讲解&#xff0c;认识报头。 UDP协议首部有16位源端口号&#xff0c;16位目的端…

基于SpringBoot的医院药房管理系统【源码+答辩PPT++项目部署】高质量论文1-1.5W字

作者简介&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容&#xff1a;&#x1f31f;Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…

25/2/16 <算法笔记> DirectPose

DirectPose 是一种直接从图像中预测物体的 6DoF&#xff08;位姿&#xff1a;6 Degrees of Freedom&#xff09;姿态 的方法&#xff0c;包括平移和平面旋转。它在目标检测、机器人视觉、增强现实&#xff08;AR&#xff09;和自动驾驶等领域中具有广泛应用。相比于传统的位姿估…

架构——Nginx功能、职责、原理、配置示例、应用场景

以下是关于 Nginx 的功能、职责、原理、配置示例、应用场景及其高性能原因的详细说明&#xff1a; 一、Nginx 的核心功能 1. 静态资源服务 功能&#xff1a;直接返回静态文件&#xff08;如 HTML、CSS、JS、图片、视频等&#xff09;。配置示例&#xff1a;server {listen 80…

Java语言介绍

Java是一种广泛使用的计算机编程语言&#xff0c;拥有跨平台、面向对象、泛型编程的特性&#xff0c;广泛应用于企业级Web应用开发和移动应用开发。任职于Sun微系统的詹姆斯高斯林等人于1990年代初开发Java语言的雏形&#xff0c;最初被命名为Oak&#xff0c;目标设置在家用电器…

shell——分支语句

文章目录 基本语法常用判断条件(1)两个整数之间比较&#xff08;2&#xff09;按照文件权限进行判断&#xff08;3&#xff09;按照文件类型进行判断&#xff08;4&#xff09;多条件判断&#xff08;&& 表示前一条命令执行成功时&#xff0c;才执行后一条命令&#xf…

细说STM32F407单片机RTC入侵检测和时间戳的原理及使用方法

目录 一、入侵检测的功能 二、示例功能 三、项目设置 1、晶振、DEBUG、CodeGenerator、USART6、KEYLED 2、RTC &#xff08;1&#xff09;设置RTC的模式。 &#xff08;2&#xff09;General、Time、Date\Wake Up分组 &#xff08;3&#xff09;Tamper分组 1&#xff…

Python elasticsearch客户端连接常见问题整理

python 访问 elasticsearch 在python语言中&#xff0c;我们一般使用 pip install elasticsearch 软件包&#xff0c;来访问es服务器。 正确用法 本地安装elasticsearch时&#xff0c;应指定与服务端相同的大版本号&#xff1a; pip install elasticsearch7.17.0然后就可以…

讯方·智汇云校华为授权培训机构的介绍

官方授权 华为授权培训服务伙伴&#xff08;Huawei Authorized Learning Partner&#xff0c;简称HALP&#xff09;是获得华为授权&#xff0c;面向公众&#xff08;主要为华为企业业务的伙伴/客户&#xff09;提供与华为产品和技术相关的培训服务&#xff0c;培养华为产业链所…

python的类装饰器

装饰器不仅可以用于函数&#xff0c;还能作用于类。将装饰器应用于类时&#xff0c;其核心原理与作用于函数类似&#xff0c;都是通过接收一个类作为输入&#xff0c;然后返回一个新的类或者修改后的原类&#xff0c;以此来为类添加额外的功能 简单的类装饰器 def add_method…