PySide6 GUI 学习笔记——常用类及控件使用方法(常用类尺寸QSize)
尺寸类之——QSize
QSize
类通过整数形式定义一个二维对象的尺寸,包括宽width()
和高height()
。
QSize官方文档
方法概述
def __init__()
def __reduce__()
def __repr__()
def boundedTo()
def expandedTo()
def grownBy()
def height()
def isEmpty()
def isNull()
def isValid()
def __ne__()
def __mul__()
def __imul__()
def __add__()
def __iadd__()
def __sub__()
def __isub__()
def __div__()
def operator/=()
def __eq__()
def scale()
def scaled()
def setHeight()
def setWidth()
def shrunkBy()
def toSizeF()
def toTuple()
def transpose()
def transposed()
def width()
方法介绍及应用举例
在Python
脚本中,通过from PySide6.QtCore import QSize
引入QSize
类。
- 构造方法
__init__(width, height)
、__init__()
和__init__(p)
构造方法__init__(width, height)
根据给定的width
和height
构造一个尺寸,__init__()
则构造一个尺寸为(-1, -1)
,即宽和高均为-1的QSize
尺寸对象,__init__(p)
则通过一个QSize
对象p
来构造一个QSize
对象。
# 构造一个宽和高都是0的QSize尺寸对象
zero_size = QSize()
# 带参数构造一个尺寸对象
size_param = QSize(5, 6)
# 以一个尺寸对象作为构造参数
size_param_from_size = QSize(size_param)
size_param_from_size.setHeight(7)
print(size_param) # PySide6.QtCore.QSize(5, 6)
print(zero_size) # PySide6.QtCore.QSize(-1, -1)
print(size_param_from_size) # PySide6.QtCore.QSize(5, 7)
__reduce__()
对象序列化方法。
p = QSize(6, 8) # PySide6.QtCore.QSize(6, 8)
print(p)
# reduce_point = p.__reduce__()
print(pickle.dumps(p)) # b'\x80\x04\x95$\x00\x00\x00\x00\x00\x00\x00\x8c\x0ePySide6.QtCore\x94\x8c\x05QSize\x94\x93\x94K\x06K\x08\x86\x94R\x94.'
# print(pickle.dumps(reduce_point))
__repr__()
方法,相当于toString
方法,将对象转换为字符串。
s = QSize(6, 8)
print(repr(s)) # 等同于print(s)或print(s.__repr__())
boundedTo()
方法,返回一个尺寸,该尺寸是当前尺寸和给定尺寸的交集,即取两者宽最小值和高最小值形成新的尺寸对象。
s = QSize(6, 8)
other_size = QSize(3, 4)
intersect = s.boundedTo(other_size)
print(intersect) # PySide6.QtCore.QSize(3, 4)
expandedTo()
方法,返回一个尺寸,该尺寸是当前尺寸和给定尺寸的并集,即取两者宽最大值和高最大值形成新的尺寸对象。
s = QSize(6, 8)
other_size = QSize(3, 4)
union = s.expandedTo(other_size)
print(union) # PySide6.QtCore.QSize(6, 8)
grownBy()
方法,返回一个尺寸,该尺寸是当前尺寸加上边距QMargins对象后的尺寸QSize。
margin = QMargins(2, 3, 4, 5) # left=2, top=3, right=4, bottom=5
grown = s.grownBy(margin)
print(grown) # PySide6.QtCore.QSize(12, 16)
grown = s.grownBy(QMargins())
print(grown) # PySide6.QtCore.QSize(6, 8)
height()
方法,返回当前尺寸的高度height
值。
s = QSize(6, 8)
print(s.height()) # 8
isEmpty()
方法,返回一个布尔值,如果当前尺宽或高小于等于0,则返回True
,否则返回False
。
s = QSize(6, 8)
print(s.isEmpty()) # False
s = QSize()
print(s.isEmpty()) # True
s = QSize(-8, 9)
print(s.isEmpty()) # True
isNull()
方法,返回一个布尔值,如果当前尺宽和高都为0,则返回True
,否则返回False
。
s = QSize()
print(s.isNull()) # False
s = QSize(5, 6)
print(s.isNull()) # False
s = QSize(0, 5)
print(s.isNull()) # False
null_size = QSize(0, 0) # True
print(null_size.isNull())
isValid()
方法,返回一个布尔值,如果当前尺宽和高都大于等于0,则返回True
,否则返回False
。
s = QSize(6, 8)
print(s.isValid()) # True
s = QSize(0, 0)
print(s.isValid()) # True
s = QSize(-6, 8)
print(s.isValid()) # False
s = QSize(6, -8)
print(s.isValid()) # False
s = QSize() # PySide6.QtCore.QSize(-1, -1)
print(s.isValid()) # False
- 不等于
__ne__()
,比较两个QSize尺寸是否相等,不相等时返回True
,否则返回False
。
s = QSize(6, 8)
other_size = QSize(6, 8)
print(s != other_size) # False
other_size.setHeight(7)
print(s != other_size) # True
- 乘法
__mul__()
,返回一个尺寸,该尺寸是当前尺寸和给定浮点型系数的乘积(按常规四舍五入原则,非Python的round()
四舍五入原则,取最接近的整数)。
注:在Python中,round()
方法的四舍五入原则遵循的是“银行家舍入法”或称为“四舍六入五成双”
s = QSize(6, 8)
mul_s = s * 0.2
print(mul_s) # PySide6.QtCore.QSize(1, 2)
s = QSize(3, 5)
mul_s = s * 0.5
print(mul_s) # PySide6.QtCore.QSize(2, 3)
print(round(3 * 0.5)) # 2
print(round(5 * 0.5)) # 2
- 自乘
__imul__()
,*=
运算,返回一个尺寸,该尺寸是当前尺寸和给定浮点型系数的乘积(按常规四舍五入原则,非Python的round()
四舍五入原则,取最接近的整数)。
s = QSize(6, 8)
s *= 0.2
print(s) # PySide6.QtCore.QSize(1, 2)
s = QSize(3, 5)
s *= 0.5
print(s) # PySide6.QtCore.QSize(2, 3)
- 加法
__add__()
,+
,返回一个尺寸,该尺寸是当前尺寸和给定尺寸的加和。
p = QSize(1, 2)
q = QSize(2, 3)
r = p + q
print(r) # PySide6.QtCore.QSize(3, 5)
- 自加
__iadd__()
,+=
,返回一个尺寸,该尺寸是当前尺寸和给定尺寸的加和。
p = QSize(1, 2)
q = QSize(2, 3)
p += q
print(p) # PySide6.QtCore.QSize(3, 5)
- 减法
__sub__()
,-
,返回一个尺寸,该尺寸是当前尺寸和给定尺寸的差。
p = QSize(1, 2)
q = QSize(2, 3)
r = p - q
print(r) # PySide6.QtCore.QSize(-1, -1)
- 自减
__isub__()
,-=
,返回一个尺寸,该尺寸是当前尺寸和给定尺寸的差。
p = QSize(1, 2)
q = QSize(2, 3)
p -= q
print(p) # PySide6.QtCore.QSize(-1, -1)
- 除法
__div__()
,/
,返回一个尺寸,该尺寸是当前尺寸除以给定浮点型系数后的尺寸(按常规四舍五入原则,非Python的round()
四舍五入原则,取最接近的整数)。
p = QSize(9, 7)
q = p / 3.1
print(q) # PySide6.QtCore.QSize(3, 2)
- 自除
/=
,返回一个尺寸,该尺寸是当前尺寸除以给定浮点型系数后的尺寸(按常规四舍五入原则,非Python的round()
四舍五入原则,取最接近的整数)。
p = QSize(9, 8)
p /= 3.2
print(p) # PySide6.QtCore.QSize(3, 3)
__eq__()
,==
比较运算,判断两个QSize对象是否相等,相等则返回True
,否则,返回False
。
p = QSize(1, 2)
q = QSize(1, 2)
print(p == q) # True
p.setHeight(3)
print(p == q) # False
scale()
缩放操作,根据给定的QSize尺寸或指定的宽、高缩放QSize尺寸,即scale(s, mode)
和scale(w, h, mode)
,其中缩放模式mode
为宽高比模式AspectRatioMode
,它包含三种模式:Qt.IgnoreAspectRatio
:忽略宽高比,直接缩放。Qt.KeepAspectRatio
:保持宽高比,缩放后,长边不会超过给定尺寸,短边可能会被裁剪。Qt.KeepAspectRatioByExpanding
:保持宽高比,缩放后,短边不会超过给定尺寸,长边可能会被裁剪。
s = QSize(6, 8)
s.scale(5, 10, Qt.KeepAspectRatio) # s = PySide6.QtCore.QSize(5, 6)
print(s)
s = QSize(6, 8)
s.scale(5, 10, Qt.KeepAspectRatioByExpanding) # s = PySide6.QtCore.QSize(7, 10)
print(s)
s = QSize(6, 8)
s.scale(5, 10, Qt.IgnoreAspectRatio) # s = PySide6.QtCore.QSize(5, 10)
print(s)
s = QSize(6, 8)
another_s = QSize(5, 10)
s.scale(another_s, Qt.KeepAspectRatio) # s = PySide6.QtCore.QSize(5, 6)
print(s)
s = QSize(6, 8)
s.scale(another_s, Qt.KeepAspectRatioByExpanding) # s = PySide6.QtCore.QSize(7, 10)
print(s)
s = QSize(6, 8)
s.scale(another_s, Qt.IgnoreAspectRatio) # s = PySide6.QtCore.QSize(5, 10)
print(s)
scaled()
缩放返回方法,据给定的QSize尺寸或指定的宽、高缩放QSize尺寸,并作为一个新对象返回而不影响原值,包括scaled(s, mode)
和scaled(w, h, mode)
,其中缩放模式mode
为宽高比模式AspectRatioMode
,它包含三种模式:Qt.IgnoreAspectRatio
:忽略宽高比,直接缩放。Qt.KeepAspectRatio
:保持宽高比,缩放后,长边不会超过给定尺寸,短边可能会被裁剪。Qt.KeepAspectRatioByExpanding
:保持宽高比,缩放后,短边不会超过给定尺寸,长边可能会被裁剪。
s = QSize(6, 8)
new_s = s.scaled(5, 10, Qt.KeepAspectRatio) # new_s = PySide6.QtCore.QSize(5, 6)
print(new_s)
s = QSize(6, 8)
new_s = s.scaled(5, 10, Qt.KeepAspectRatioByExpanding) # new_s = PySide6.QtCore.QSize(7, 10)
print(s) # s = Pyside6.QtCore.QSize(6, 8)
print(new_s)
s = QSize(6, 8)
new_s = s.scaled(5, 10, Qt.IgnoreAspectRatio) # new_s = PySide6.QtCore.QSize(5, 10)
print(new_s)
s = QSize(6, 8)
another_s = QSize(5, 10)
new_s = s.scaled(another_s, Qt.KeepAspectRatio) # new_s = PySide6.QtCore.QSize(5, 6)
print(new_s)
s = QSize(6, 8)
new_s = s.scaled(another_s, Qt.KeepAspectRatioByExpanding) # new_s = PySide6.QtCore.QSize(7, 10)
print(new_s)
s = QSize(6, 8)
new_s = s.scaled(another_s, Qt.IgnoreAspectRatio) # new_s = PySide6.QtCore.QSize(5, 10)
print(new_s)
setHeight()
设置QSize尺寸高度。
s = QSize(8, 12) # s = PySide6.QtCore.QSize(8, 12)
s.setHeight(20) # s = PySide6.QtCore.QSize(8, 20)
print(s)
setWidth()
设置QSize尺寸宽度。
s = QSize(8, 12) # s = PySide6.QtCore.QSize(8, 12)
s.setWidth(20) # s = PySide6.QtCore.QSize(20, 12)
print(s)
shrunkBy()
返回一个QSize尺寸,根据给定的QMargins收缩给定的QSize尺寸,形成一个新对象返回。
s = QSize(8, 12) # s = PySide6.QtCore.QSize(8, 12)
new_s = s.shrunkBy(QMargins(2, 3, -1, -2)) # new_s = PySide6.QtCore.QSize(7, 11), width = 8 - 2 - (-1) = 7, height = 12 - 3 - (-2) = 11
print(new_s)
toSizeF()
返回一个QSizeF尺寸,根据给定的QSize尺寸,形成一个新对象返回。
s = QSize(8, 12) # s = PySide6.QtCore.QSize(8, 12)
f = s.toSizeF() # f = PySide6.QtCore.QSizeF(8.000000, 12.000000)
print(f)
toTuple()
将QSize尺寸的宽和高以tuple
元组的方式返回。
s = QSize(8, 12) # s = PySide6.QtCore.QSize(8, 12)
print(s.toTuple()) # (8, 12)
transpose()
修改原QSize尺寸,将其转置(宽和高交换)。
s = QSize(8, 12) # s = PySide6.QtCore.QSize(8, 12)
s.transpose()
print(s) # PySide6.QtCore.QSize(12, 8)
transposed()
返回一个新QSize尺寸,其宽和高被交换。
s = QSize(8, 12) # s = PySide6.QtCore.QSize(8, 12)
new_s = s.transposed()
print(s)
print(new_s) # PySide6.QtCore.QSize(12, 8)
width()
返回QSize尺寸的宽度。
s = QSize(8, 12) # s = PySide6.QtCore.QSize(8, 12)
print(s.width()) # 8