当前位置: 首页 > news >正文

PySide6 GUI 学习笔记——常用类及控件使用方法(常用类矩阵QRect)

文章目录

  • 一、构造与初始化方法
  • 二、坐标与尺寸获取
  • 三、坐标与尺寸设置
  • 四、几何运算方法
  • 五、移动与调整方法
  • 六、状态判断方法
  • 七、类型转换方法
  • 八、操作符重载
  • 九、静态方法
  • 十、特殊方法
  • 附录
    • 方法速查表
    • 注意的问题
    • 交集和并集图解

📘 PySide6.QtCore.QRect 使用整数精度定义平面矩形区域,其官方文档参考这里。


一、构造与初始化方法

方法签名说明
QRect()构造空矩形(宽高为0)
QRect(x: int, y: int, width: int, height: int)通过坐标和尺寸构造
QRect(topLeft: QPoint, size: QSize)通过顶点和尺寸构造
QRect(topLeft: QPoint, bottomRight: QPoint)通过对角点构造(不推荐)
# 空矩形
null_rect = QRect()# 标准构造
rect1 = QRect(10, 20, 300, 400)# QPoint+QSize构造
rect2 = QRect(QPoint(10, 20), QSize(300, 400))

二、坐标与尺寸获取

方法返回值说明
left()int左边界x坐标
top()int上边界y坐标
right()int右边界x坐标(含历史原因带来的偏移: left() + width() - 1)
bottom()int下边界y坐标(含历史偏移:top() + height() - 1
width()int实际宽度(可能负数)
height()int实际高度(可能负数)
topLeft()QPoint左上角坐标
bottomRight()QPoint右下角坐标(含偏移)
center()QPoint中心点坐标
size()QSize尺寸对象
rect = QRect(10, 20, 30, 40)
print(rect.right())   # 39 (10+30-1)
print(rect.size())    # QSize(30, 40)
print(rect.top())     # 20
print(rect.width())     # 30
print(rect.height())    # 40
print(rect.x())         # 10
print(rect.y())         # 20
print(rect.bottom())    # 59 (20+40-1)
print(rect.left())      # 10,和x()一样

三、坐标与尺寸设置

方法参数说明
setLeft(x: int)新左边界保持右边界不变
setRight(x: int)新右边界改变宽度
setTop(y: int)新上边界保持下边界不变
setBottom(y: int)新下边界改变高度
setTopLeft(p: QPoint)新顶点改变位置,保持右下
setBottomRight(p: QPoint)新对角点改变尺寸
setWidth(w: int)新宽度右边界自动计算
setHeight(h: int)新高度下边界自动计算
setSize(s: QSize)新尺寸保持左上角不变
setCoords(x1: int, y1: int, x2: int, y2: int)四坐标直接设置四个边界
setRect(x: int, y: int, w: int, h: int)坐标+尺寸重置整个矩形
rect = QRect(10, 20, 30, 40)
rect.setRight(50)      # 新宽度=50-10+1=41
rect.setSize(QSize(20, 60))  # 变为(10,20,20,60)

四、几何运算方法

方法返回值说明
contains(QPoint)bool点是否在矩形内
contains(QRect)bool是否完全包含另一矩形
intersects(QRect)bool是否有重叠区域
intersected(QRect)QRect返回交集区域
united(QRect)QRect返回并集区域
adjusted(dx1: int, dy1: int, dx2: int, dy2: int)QRect调整边界后的新矩形
normalized()QRect标准化后的正尺寸矩形
rect_a = QRect(0, 0, 100, 100)
rect_b = QRect(50, 50, 100, 100)print(rect_a.intersected(rect_b))  # QRect(50,50,50,50)
print(rect_a.contains(QPoint(30,30)))  # True

五、移动与调整方法

方法参数说明
translate(dx: int, dy: int)偏移量相对移动
translated(dx: int, dy: int)偏移量返回移动后的新矩形
moveTo(x: int, y: int)新坐标绝对移动左上角
moveTopLeft(p: QPoint)新顶点移动左上角
adjust(dx1: int, dy1: int, dx2: int, dy2: int)调整量直接修改边界
marginsAdded(QMargins)边距增加外边距后的新矩形
marginsRemoved(QMargins)边距移除外边距后的新矩形
rect = QRect(10, 20, 30, 40)
rect.translate(5, -5)  # 新位置(15,15,30,40)
new_rect = rect.translated(0, 10)  # (15,25,30,40)
new_rect.moveTo(0, 0)   # (0,0,30,40)

六、状态判断方法

方法返回值说明
isEmpty()bool是否面积为零(允许负尺寸)
isNull()bool是否宽高均为0
isValid()bool是否满足 left<=right 且 top<=bottom
rect1 = QRect(10,10,-5,20)
print(rect1.isEmpty())  # True (宽度为负)
print(rect1.isValid())   # Falserect2 = QRect()
print(rect2.isNull())    # True

七、类型转换方法

方法返回值说明
toRectF()QRectF转为浮点矩形
getCoords()(x1, y1, x2, y2)获取四个边界坐标
getRect()(x, y, w, h)获取左上坐标和尺寸
rect = QRect(10, 20, 30, 40)
print(rect.getCoords())  # (10, 20, 39, 59)
print(rect.toRectF())    # QRectF(10.0,20.0,30.0,40.0)

八、操作符重载

操作符等效方法说明
&intersected()交集运算
|united()并集运算
+=marginsAdded()增加边距
-=marginsRemoved()移除边距
==坐标相等判断完全一致
-差集运算返回缩小后的矩形
rect1 = QRect(0,0,100,100)
rect2 = QRect(50,50,100,100)
print(rect1 & rect2)  # QRect(50,50,50,50)
print(rect1 | rect2)  # QRect(0,0,150,150)

九、静态方法

方法说明
span(p1: QPoint, p2: QPoint)创建包含两点的最小矩形
p1 = QPoint(10, 20)
p2 = QPoint(50, 60)
span_rect = QRect.span(p1, p2)  # QRect(10,20,41,41)

十、特殊方法

方法说明
__reduce__()序列化支持
__repr__()字符串表示
transposed()宽高交换后的新矩形
rect = QRect(10, 20, 30, 40)
print(rect.transposed())  # QRect(10,20,40,30)

附录

方法速查表

类别方法
构造QRect(), QRect(x,y,w,h), QRect(QPoint,QSize)
坐标获取left(), right(), top(), bottom(), topLeft(), bottomRight(), center()
尺寸获取width(), height(), size()
坐标设置setLeft(), setRight(), setTop(), setBottom(), setTopLeft(), setBottomRight()
尺寸设置setWidth(), setHeight(), setSize(), setCoords(), setRect()
几何运算contains(), intersects(), intersected(), united(), adjusted(), normalized()
移动调整translate(), translated(), moveTo(), adjust(), marginsAdded(), marginsRemoved()
状态判断isEmpty(), isNull(), isValid()
类型转换toRectF(), getCoords(), getRect()
操作符&, |, +=, -=, ==, -
特殊方法transposed(), span()

注意的问题

实际开发中需特别注意:

  1. 历史坐标偏移问题(right/bottom返回值)
  2. 负尺寸需用normalized()标准化
  3. 移动与调整方法的原地修改返回新对象的区别
  4. 有效性验证应在几何运算前完成

交集和并集图解

  • intersect
    交集
  • united
    并集

相关文章:

  • 基于Spring AI Alibaba实现MCP协议的SSE实时流式服务深度解析
  • 力扣刷题 - 203.移除链表元素
  • leetcode(01)森林中的兔子
  • 六、小白如何用Pygame制作一款跑酷类游戏(静态障碍物和金币的添加)
  • 深入浅出:LDAP 协议全面解析
  • LangChain 单智能体模式示例【纯代码】
  • IPv6 公网设置技巧
  • 初识javascript
  • Sharding-JDBC 系列专题 - 第一篇:简介与快速入门
  • Cribl 对Windows-xml log 进行 -Removing filed-06
  • DSP28335入门学习——第一节:工程项目创建
  • SpringBoot 3 与 SpringDoc 打造完美接口文档
  • Centos9 离线安装 MYSQL8
  • Spring Boot集成MongoDB及实战技巧与性能调优
  • android framework开发的技能要求
  • 哈希表实现
  • 微前端框架 Wujie
  • python3GUI--仿网课答题播放器 By:PyQt5(分享)
  • System.out 详解
  • ts与面向对象
  • 2025年中央金融机构注资特别国债发行,发行金额1650亿
  • 创单次出舱活动时长世界纪录,一组数据盘点神十九乘组工作成果
  • 科普书单·新书|鸟界戏精观察报告
  • 内部敏感文件遭万人共享,特朗普政府又曝安全漏洞
  • AI时代教育如何变革?上海首批 “标准化家长学校”出炉
  • 新华社经济随笔:把握不确定性中的确定性