【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(左, 上, 右, 下),默认内容边距都是0

label.setContentsMargins(100, 200, 0, 0)
print(label.getContentsMargins())

#获取内容区域,默认内容区域是水平靠左,垂直居中
print(label.contentsRect())


# 2.3 展示控件
window.show()
# 3. 应用程序的执行, 进入到消息循环
sys.exit(app.exec_())

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

小(微)间距P1.538COB渠道现货销售将加速全面升级替换SMD产品。

COB(Chip on Board)技术,如一颗璀璨的星辰,在上世纪60年代的科技夜空中悄然升起。它巧妙地将LED芯片镶嵌在PCB电路板的怀抱中,再用特种树脂为其披上一层坚韧的外衣,宛如一位精心雕琢的艺术家在创作一幅完美…

【Python机器学习】处理文本数据——用tf-idf缩放数据

为了按照我们预计的特征信息量大小来缩放特征,而不是舍弃那些认为不重要的特征,最常见的一种做法就是使用词频-逆向文档频率(tf-idf)。这一方法对某个特定文档中经常出现的术语给与很高的权重,但是堆在语料库的许多文档…

【UE5.1】Chaos物理系统基础——04 事件驱动粒子效果

目录 效果 步骤 一、炸开时的烟雾效果 二、炸开时的碎片效果 效果 步骤 一、炸开时的烟雾效果 1. 选中场景中的几何体集,勾选“通知中断”,这样当几何体集解体时就能产生一个事件;勾选“通知碰撞”,当几何体集检测到碰撞也能…

Java+前后端分离架构+ MySQL8.0.36产科信息管理系统 产科电子病历系统源码

Java前后端分离架构 MySQL8.0.36产科信息管理系统 产科电子病历系统源码 产科信息管理系统—住院管理 数字化产科住院管理是现代医院管理中的重要组成部分,它利用数字化技术优化住院流程,提升医疗服务质量和效率。以下是对数字化产科住院管理的详细阐述…

华火电燃喷火单灶再荣获中国质量认证中心 CQC 权威证书,引领行业新高度

近日,华火传来了一则令整个行业瞩目的重大喜讯:其电燃喷火单灶“再度”成功荣获中国质量认证中心(CQC)权威证书。这一里重大程碑式的成就,不仅是对华火产品卓越品质的高度认可,更是华火在品牌发展道路上的一…

网安小贴士(8)IPv4与IPv6

一、前言 IPv4和IPv6都是互联网协议(IP)的版本,它们用于在互联网上标识和定位设备。 二、定义 IPv4(互联网协议第四版): IPv4是互联网协议的第一个广泛使用的版本,最初在1981年被标准化为RFC 7…

单位立方体各个面上的法向量,向量场以及每个面上的通量

单位立方体各个面上的法向量,向量场 F ( x , y , z ) \mathbf{F} (x, y, z) F(x,y,z) 以及每个面上的通量 flyfish 假设我们有一个单位立方体,向量场 F ( x , y , z ) \mathbf{F} (x, y, z) F(x,y,z) 在该立方体上。 法向量 :单位立方…

中霖教育:二建报名成功后怎么审核?

【中霖教育怎么样】【中霖教育靠谱吗】 在成功完成二级建造师资格考试的报名流程后,需要准备后续的审核阶段,审核是否通过关乎考生是否能顺利参加考试,审核的方式包括:现场审核、网络审核以及考试后的审核。 某些地区会要求考生…

空间数据获取与预处理指南:生产与科研应用

1.空间数据简介 2.免费的国外GIS数据下载方法 3.免费的国内GIS数据下载方法 4.遥感云平台数据的获取方法 5.专题数据的获取及预处理示例 (1)行政区划数据 (2)气象数据 (3)土壤数据 (4)遥感产品数据 (5)统计数据 (6)…… 原文链接https://mp.weixin.qq.com/s?__bizMz…

实验三 图像增强—灰度变换

一、实验目的: 1、了解图像增强的目的及意义,加深对图像增强的感性认识,巩固所学理论知识。 2、学会对图像直方图的分析。 3、掌握直接灰度变换的图像增强方法。 二、实验原理及知识点 术语‘空间域’指的是图像平面本身,在空…

【MySQL系列】隐式转换

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

构建Android studio版的CarSystemUI工程时因为包名一致导致BuildConfig问题

项目场景: 公司计划开发杰发AC8025-Android 12版本车载平台,前期预研需要构建Android studio版的CarSystemUI工程 问题描述 AAOS车载项目里面的CarSystemUI源码默认无Android studio版本,为了后期快速开发调试需要构建Android studio能直接…

python多线程与多进程开发实践及填坑记(1)

1. 需求分析 1.1. 概述 基于Flask、Pika、Multiprocessing、Thread搭建一个架构,完成多线程、多进程工作。具体需求如下: 并行计算任务:使用multiprocessing模块实现并行计算任务,提高计算效率、计算能力。消息侦听任务&#x…

大厂都在加急招人的大模型LLM,到底怎么学?

大模型如何入坑? 想要完全了解大模型,你首先要了解市面上的LLM大模型现状,学习Python语言、Prompt提示工程,然后深入理解Function Calling、RAG、LangChain 、Agents等 很多人不知道想要自学大模型,要按什么路线学&a…

电脑刚删除的文件怎么恢复?可使用这几种恢复方法!

在日常生活和工作中,我们时常会在电脑上进行各种文件操作,包括删除不需要的文件。然而,有时候我们可能会误删一些重要的文件,或者在删除后立刻意识到这些文件的重要性。 那么,电脑刚删除的东西怎么恢复呢?本…

神领物流项目第一天

文章目录 聚焦快递领域首先第一个是验证码模块流程登录接口权限管家 聚焦快递领域 首先第一个是验证码模块流程 首先生成验证码的流程 可以使用工具类去生成验证码 LineCaptcha lineCaptcha CaptchaUtil.createLineCaptcha(160, 60, 4, 26);// 获取值然后存入redis中 strin…

WEB04MyBatis

Mybatis mybatis查询 准备 准备工作 在目前的数据库中添加一张数据表emp 将资料中提供的day04-01-mybatis导入的目前的工程中 修改配置文件中的数据库的账户和密码 观察实体类中的属性和数据表中的字段的对应关系 查询结果封装 查询所有 SQL语句 select * from emp; …

基于Oauth2.0的OpenFeign远程调用

目录 前言 1.引入openfeign相关依赖 2.开启openFeign远程调用,在启动类头加上注解即可 3. 提供远程调用接口,接口名称必须与controler名称保持一致 4.远程调用关键代码 4.1 注入restTemplate 4.2 配置拦截器 4.3 设置请求头 4.4 获取请求结果 4.5 远…

两次叛国投敌,没有祸及子孙反而家族长盛不衰的传奇

这个人就是韩国国王韩王信,汉朝八大异姓王之一。 第一次叛国投敌,发生在楚汉争霸时期。有一次他的军队被项羽包围,于是选择了投降。不过,这是权宜之计,不久就借机回到刘邦阵营。 第二次叛国投敌,发生在西…

openssl交叉编译-移植ARM

OpenSSL是一个开源的密码学工具包,提供了一组用于网络安全的加密和解密算法、协议以及相关工具的库,它通过提供多种加密算法、协议和工具,为网络通信和数据存储提供了强大的安全保障。 主要功能 加密和解密: OpenSSL提供了多种对…