【python】PyQt5控件尺寸大小位置,内容边距等API调用方法实战解析

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,前后端开发,小程序开发,云原生K8S,人工智能,js逆向,App逆向,网络系统安全,数据分析,PyQt5,tkinter,Django,fastapi,flask等框架,linux,shell脚本等实操经验,网站搭建,数据库等分享。

所属的专栏:PyQt5桌面应用开发,零基础到进阶应用实战
景天的主页:景天科技苑

文章目录

  • QWidget
    • 1.子控件受父控件裁切
    • 2.控件按z轴顺序排序
    • 3.控件的位置和大小
      • (1)API介绍
      • (2)尺寸获取实战
      • (3)尺寸设置
      • (4)尺寸设置实战案例
      • (5)尺寸限定
    • 4.内容边距

QWidget

基础窗口控件QWidget类是所有用户界面对象的基类,所有的窗口和控件都直接或间接继承自QWidget类。
窗口控件(Widget,简称“控件”)是在PyQt中建立界面的主要元素。在PyQt中把没有嵌入到其他控件中的控件称为窗口,一般窗口都有边框、标题栏。
窗口是指程序的整体界面,可以包含标题栏、菜单栏、工具栏、关闭按钮、最小化按钮、最大化按钮等;控件是指按钮、复选框、文本框、表格、进度条等这些组成程序的基本元素。
一个程序可以有多个窗口,一个窗口也可以有多个控件。

QWidget思维导图描述如下:
在这里插入图片描述

1.子控件受父控件裁切

# 0. 导入需要的包和模块
from PyQt5.Qt import *  # 主要包含了我们常用的一些类, 汇总到了一块
import sys# 1. 创建一个应用程序对象
app = QApplication(sys.argv)# 2. 控件的操作
# 2.1 创建控件
window = QWidget()# 2.2 设置控件
#设置窗口标题,默认标题是python,只有顶级控件才可以设置标题栏的标题
window.setWindowTitle("QWidget体验")
#设置窗口大小,注意,设置的空间尺寸大小,不包含上面的标题栏
window.resize(500, 500)#验证控件受父控件裁切
red = QWidget(window)
red.resize(100,100)
red.move(450,0)
red.setStyleSheet("background-color:red;")# 2.3 展示控件
window.show()# 3. 应用程序的执行, 进入到消息循环
sys.exit(app.exec_())

运行,可以看到红色的子控件超过父控件范围的部分被父控件裁剪,没显示出来
在这里插入图片描述

2.控件按z轴顺序排序

演示每个控件都是按z轴顺序排序,代码写在下面的会把上面的遮挡

# 0. 导入需要的包和模块
from PyQt5.Qt import *  # 主要包含了我们常用的一些类, 汇总到了一块
import sys# 1. 创建一个应用程序对象
app = QApplication(sys.argv)# 2. 控件的操作
# 2.1 创建控件
window = QWidget()# 2.2 设置控件
#设置窗口标题,默认标题是python,只有顶级控件才可以设置标题栏的标题
window.setWindowTitle("QWidget体验")
#设置窗口大小,注意,设置的空间尺寸大小,不包含上面的标题栏
window.resize(500, 500)red = QWidget(window)
red.resize(100,100)
red.move(300,0)
red.setStyleSheet("background-color:red;")#验证每个空间都是按z轴顺序排序,代码写在下面的会把上面的遮挡
green = QWidget(window)
green.resize(100,100)
green.move(300,50)
green.setStyleSheet("background-color:green;")# 2.3 展示控件
window.show()# 3. 应用程序的执行, 进入到消息循环
sys.exit(app.exec_())

运行,可见绿色将红色部分遮挡
在这里插入图片描述

查看QWidget直接父类

print("QWidget父类",QWidget.__bases__)

在这里插入图片描述

类名.mro()不仅能找出直接父类,还能找出间接父类
#mro 针对super作用:专门用于解决复杂的多继承调用顺序关系;依照mro返回的列表顺序,依次调用;
print(“使用super,QWidget父类调用顺序”,QWidget.mro())
在这里插入图片描述

3.控件的位置和大小

在这里插入图片描述

(1)API介绍

获取:
在这里插入图片描述

框架尺寸与控件尺寸差异对比
在这里插入图片描述

(2)尺寸获取实战

# 0. 导入需要的包和模块
from PyQt5.Qt import *  # 主要包含了我们常用的一些类, 汇总到了一块
import sys# 1. 创建一个应用程序对象
app = QApplication(sys.argv)# 2. 控件的操作
# 2.1 创建控件
window = QWidget()# 2.2 设置控件
#设置窗口标题,默认标题是python,只有顶级控件才可以设置标题栏的标题
window.setWindowTitle("QWidget尺寸")
#设置窗口大小,注意,设置的空间尺寸大小,不包含上面的标题栏
window.resize(500, 500)window.move(300,200)#获取尺寸
print("获取控件的x坐标",window.x())
print("获取控件的y坐标",window.y())
print("获取控件的pos",window.pos())print("获取控件的宽度",window.width())
print("获取控件的高度",window.height())print("获取控件的size",window.size())
print("获取控件的geometry",window.geometry())
print("获取控件的rect",window.rect())#获取框架尺寸
print("获取框架的大小",window.frameSize())
print("获取框架的geometry",window.frameGeometry())# 2.3 展示控件
window.show()# 3. 应用程序的执行, 进入到消息循环
sys.exit(app.exec_())

在这里插入图片描述

由于上述获取框架的方式是在控件show之前获取的,所以是错误的,要在控件显示完毕后再获取,才是正确的
在这里插入图片描述

此时获取的框架尺寸才是正确的
在这里插入图片描述

(3)尺寸设置

API介绍
在这里插入图片描述

设置窗口大小,注意,设置的空间尺寸大小,不包含上面的标题栏

#设置的是用户区域的宽和高
window.resize(300, 300)#移动控件
window.move(300,200)

在这里插入图片描述

通过setGeometry设置 setGeometry(x_noFrame, y_noFrame, width, height)

#设置的是用户区域的位置以及宽和高,不包含标题栏。要在show之后设置
window.setGeometry(0,0,500,500)

展示看不到标题栏
在这里插入图片描述

adjustSize根据内容自适应大小

# 0. 导入需要的包和模块
from PyQt5.Qt import *  # 主要包含了我们常用的一些类, 汇总到了一块
import sys# 1. 创建一个应用程序对象
app = QApplication(sys.argv)# 2. 控件的操作
# 2.1 创建控件
window = QWidget()# 2.2 设置控件
#设置窗口标题,默认标题是python,只有顶级控件才可以设置标题栏的标题
window.setWindowTitle("QWidget尺寸设置")#添加个标签
label = QLabel(window)
label.setText("景天")
label.move(200,100)
label.setStyleSheet("background-color:cyan;")#设置槽函数
def changecontent():newcontent = label.text()+"景天"label.setText(newcontent)#添加个按钮
#实现点击按钮,标签内容复制一份
btn = QPushButton(window)
btn.setText("增加内容")
btn.move(200,200)
btn.clicked.connect(changecontent)# 2.3 展示控件
window.show()#设置窗口大小,注意,设置的空间尺寸大小,不包含上面的标题栏
#设置的是用户区域的宽和高
# window.resize(300, 300)#移动控件
# window.move(300,200)#adjustSize根据内容自适应大小
# window.adjustSize()#setFixedSize(w,h)设置固定尺寸# window.setFixedSize(200,300)#通过setGeometry设置 setGeometry(x_noFrame, y_noFrame, width, height)
#设置的是用户区域的位置以及宽和高,要在show之后设置
# window.setGeometry(0,0,500,500)# 3. 应用程序的执行, 进入到消息循环
sys.exit(app.exec_())

这样写,我们点击按钮,标签内容有增加,但是由于标签尺寸没有变化,导致后面的内容没显示出来
在这里插入图片描述

我们稍作调整

#设置槽函数
def changecontent():newcontent = label.text()+"景天"label.setText(newcontent)#设置标签尺寸自适应变化label.adjustSize()

可以看到,点击按钮,标签内容随之变化
在这里插入图片描述

setFixedSize(w,h)设置固定尺寸

#设置固定尺寸后,窗口大小不能被拖拽改变大小
window.setFixedSize(200,300)

在这里插入图片描述

(4)尺寸设置实战案例

通过给定的的个数, 你负责在一个窗口内创建相应个数的子控件
要求:按照九宫格的布局进行摆放 1行3列

计算公式推导如图所示
在这里插入图片描述

import sys
from PyQt5.Qt import *app = QApplication(sys.argv)window = QWidget()# 总的控件个数
widget_count = 100
# 一行有多少列
column_count = 3# 计算一个控件的宽度,最新版本必须取整数
#值为父控件宽度除以多少列
widget_width = int(window.width() / column_count)
# 总共有多少行 (编号 // 一行多少列 + 1)
#编号为总个数减1
row_count = int((widget_count - 1) // column_count + 1)
#每行的高度,总高度除以总行数
widget_height = int(window.height() / row_count)#循环显示所有子控件
for i in range(0, widget_count):#新创建的控件都是window的子控件w = QWidget(window)w.resize(widget_width, widget_height)#设置控件的位置,x位置为控件编号与总列数取余,乘以每个控件宽度widget_x = int(i % column_count * widget_width)#y位置为控件编号与总列数地板除,乘以每个控件高度widget_y = int(i // column_count * widget_height)w.move(widget_x, widget_y)w.setStyleSheet("background-color: red;border: 1px solid yellow;")#设置父控件
#自适应尺寸
window.adjustSize()
window.move(300, 300)
window.show()sys.exit(app.exec_())

运行如下
在这里插入图片描述

改变下控件个数和每行列数
在这里插入图片描述

运行如下
在这里插入图片描述

(5)尺寸限定

API介绍
在这里插入图片描述

# 0. 导入需要的包和模块
from PyQt5.Qt import *
import sys# 1. 创建一个应用程序对象
app = QApplication(sys.argv)# 2. 控件的操作
# 2.1 创建控件
window = QWidget()
# 2.2 设置控件
window.setWindowTitle("最小尺寸最大尺寸限定")
# window.resize(500, 500)
#固定尺寸,不能拖拽修改大小
# window.setFixedSize(500, 500)
#设置最小尺寸限制,不能拖拽小于最小尺寸
window.setMinimumSize(200, 200)
#设置最大尺寸限制,不能拖拽大于最大尺寸
window.setMaximumSize(500, 500)#可以单独设置最大最小宽度和高度
# window.setMinimumWidth(500)
# window.setMaximumWidth(800)
#设置了最大尺寸和最小尺寸,再次修改也不生效
window.resize(1000, 1000)# 2.3 展示控件
window.show()
# 3. 应用程序的执行, 进入到消息循环
sys.exit(app.exec())

可拖拽,但是不能超过最大尺寸和最小尺寸
在这里插入图片描述

4.内容边距

API介绍
在这里插入图片描述

内容区域默认是水平靠左,垂直居中的位置
内容区域是控件大小减去内容边距后的所剩的位置

# 0. 导入需要的包和模块
from PyQt5.Qt import *
import sys# 1. 创建一个应用程序对象
app = QApplication(sys.argv)# 2. 控件的操作
# 2.1 创建控件
window = QWidget()
# 2.2 设置控件
window.setWindowTitle("内容边距的设定")
window.resize(500, 500)label = QLabel(window)
label.setText("社会我景天哥, 人狠话不多")
label.resize(300, 300)
label.setStyleSheet("background-color: cyan;")#设置内容边距setContentsMargins(左, 上, 右, 下),默认内容边距都是0label.setContentsMargins(100, 200, 0, 0)
print(label.getContentsMargins())#获取内容区域,默认内容区域是水平靠左,垂直居中
print(label.contentsRect())# 2.3 展示控件
window.show()
# 3. 应用程序的执行, 进入到消息循环
sys.exit(app.exec_())

可以设置内容边距,查看内容边距和内容区域
在这里插入图片描述

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

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

相关文章

第十二章 执行引擎

一、执行引擎概述 概述 执行引擎是 Java 虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引…

AlmaTech股份有限公司如何通过有效的营销本地化解锁全球市场

在当今全球化经济中,企业必须调整营销策略,以引起不同地区不同受众的共鸣。营销本地化,包括定制营销材料以满足各种市场的文化、语言和监管要求,对于实现这一目标至关重要。本案例研究探讨了领先的电子商务公司AlmaTech股份有限公…

解锁水利智慧:智慧水利的深度剖析与未来展望,探讨智慧水利如何助力水利行业实现数字化转型与智能化升级

本文关键词:智慧水利、智慧水利工程、智慧水利发展前景、智慧水利技术、智慧水利信息化系统、智慧水利解决方案、数字水利和智慧水利、数字水利工程、数字水利建设、数字水利概念、人水和协、智慧水库、智慧水库管理平台、智慧水库建设方案、智慧水库解决方案、智慧…

数据驱动下的SaaS渠道精细化运营:提升ROI的实战指南

在当今数字化转型的大潮中,SaaS(Software as a Service)企业面临着日益激烈的市场竞争。为了在市场中脱颖而出,实现可持续增长,SaaS企业必须转向更为精细化的运营模式,而数据驱动则是实现这一目标的关键。本…

TCP 的安全可靠

TCP的安全可靠 重传机制往返时间测量快速重传 流量控制拥塞控制 重传机制 T C P确认从另一端收到的数据以提供可靠的运输层,但数据和确认都有可能会丢失。 T C P通过在发送时设置一个定时器来解决这种问题。如果当定时器溢出时还没有收到确认,它就重传该…

【C++】认识使用string类

【C】STL中的string类 C语言中的字符串标准库中的string类string类成员变量string类的常用接口说明成员函数string(constructor构造函数)~string(destructor析构函数)默认赋值运算符重载函数 遍历string下标[ ]迭代器范围for反向迭代器 capacitysizelengthmax_sizeresizecapaci…

不错的用户需求访谈方法

不错的用户需求访谈方法,可以用如下的矩阵,用来引导用户访谈:

【C++】哈希表 ---开散列版本的实现

你很自由 充满了无限可能 这是很棒的事 我衷心祈祷你可以相信自己 无悔地燃烧自己的人生 -- 东野圭吾 《解忧杂货店》 开散列版本的实现 1 前言2 开散列版本的实现2.1 节点设计2.2 框架搭建2.3 插入函数2.4 删除函数2.5 查找操作2.6 测试 Thanks♪(・ω&#x…

python如何不保留小数

1、int() 向下取整(内置函数) n 3.75 print(int(n)) >>> 3 n 3.25 print(int(n)) >>> 3 2、round() 四舍五入(内置函数) n 3.75 print(round(n)) >>> 4 n 3.25 print(round(n)) >>> 3 …

SpringBoot实战:轻松实现XSS攻击防御(注解和过滤器)

文章目录 引言一、XSS攻击概述1.1 XSS攻击的定义1.2 XSS攻击的类型1.3 XSS攻击的攻击原理及示例 二、Spring Boot中的XSS防御手段2.1 使用注解进行XSS防御2.1.1 引入相关依赖2.1.2 使用XSS注解进行参数校验2.1.3 实现自定义注解处理器2.1.4 使用注解 2.2 使用过滤器进行XSS防御…

[单master节点k8s部署]18.监控系统构建(三)Grafana安装

Grafana是一个跨平台的开源的度量分析和可视化工具。支持多种数据源,比如OpenTSDB,Prometheus,ElasticResearch,Cloudwatch等。 Grafana安装 通过yaml配置grafana的pod和service,grafana工作在kube-system的命名空间…

C#(asp.net)房屋租赁管理系统-计算机毕业设计源码64421

目 录 摘要 1 绪论 1.1 研究背景与意义 1.2开发现状 1.3论文结构与章节安排 2 房屋租赁管理系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统用例分析 …

标贝语音识别在智能会议系统的应用案例

语音识别是指将语音信号转换成文本或者其他数字信号形式的过程,随着人工智能在人们日常工作生活中的普及,语音识别技术也被广泛的应用在智能家居、智能会议、智能客服、智能驾驶等领域,以语音识别技术在智能会议系统中的应用为例,…

超高频RFID电子标签在服装供应链管理中的应用与优势

随着物联网技术的发展,RFID电子标签在服装行业中的应用越来越广泛。特别是超高频RFID电子标签,因其独特的优势,成为服装供应链管理的理想选择。本文将为您介绍超高频RFID电子标签的工作原理及其在服装供应链管理中的应用与优势。 超高频RFI…

Node之Web服务

前言 本文将讲解node的web服务 通过讲解http请求,node创建web服务等知识点让你更加深入的理解web服务和node创建的web服务 HTTP请求是什么? HTTP请求是客户端(通常是浏览器或其他应用程序)与服务器之间进行通信的一种方式。 …

Linux-C语言实现一个进度条小项目

如何在linux中用C语言写一个项目来实现进度条?(如下图所示) 我们知道\r是回车,\n是换行(且会刷新) 我们可以用 \r 将光标移回行首,重新打印一样格式的内容,覆盖旧的内容,…

2024暑假集训第二次考试

10062. Majority Opinion 思路分析 这道题就是一道思维题,这种题需要刻意练习,形成一定的思维模式用之前学过算法的原理去思考问题,而不是一味考验某一种算法的应用。 这道题就需要思考的是什么情况可以让这个奶牛爱吃同一种干草,…

STM32智能家居安防系统教程

目录 引言环境准备智能家居安防系统基础代码实现:实现智能家居安防系统 4.1 数据采集模块 4.2 数据处理与分析 4.3 控制系统实现 4.4 用户界面与数据可视化应用场景:安防管理与优化问题解决方案与优化收尾与总结 1. 引言 智能家居安防系统利用STM32嵌…

使用echarts绘制中国地图根据不同的省份划分到指定区域里面中

需求:我们在开发过程中会遇到使用中国地图来划分不同区域省份下面的数量统计情况,但是有时候使用Echarts里面地图功能和我们实际业务需求不匹配的,这个时候就需要我们手动自定义进行划分不同区域下面的省份数据。例如大区1下面有哪些省份,大区2对应哪些的省份进行划分显示的…