🌟想系统化学习 GUI 编程?看看这个:[Python GUI 编程] PySide & PyQt - 学习手册-优快云博客
0x01:QWidget 尺寸获取 — 基础知识
在介绍 QWidget 尺寸获取方法之前,我们先来简单说一下 QWidget 窗口控件的分类。我们习惯性的将控件分为有父控件的控件和无父控件的控件(在上一章中我们已经介绍了这两种控件对应的不同坐标系)。
如果一个控件没有父控件,系统为了方便管理,就会给它套上一层框架(标题行、放大按钮、缩小按钮、关闭按钮),但是这个框架也是占空间,占位置的呀。所以在后续的学习中,我们要着重分清哪一部分是外围框架,哪一部分是内部真实的 QWidget 空间(我们又称为 “用户区域”,因为用户可以在里面进行编辑),下图可以用作参考:
0x02:QWidget 尺寸获取 — 相关方法
QWidget 的尺寸获取方法比较 Easy,将上面这个思维导图与前面我们介绍的讲解图片一对比相信你很快就会理解各个函数的意思。所以这里,笔者就不详细的讲解每一个获取的方法了。
笔者这里讲解一下注意点,即 “控件显示完毕之后,具体的位置或者尺寸数据才会正确”,看下面这个示例代码:
import sys
from PyQt5.Qt import *
# 1. 创建一个应用程序对象
app = QApplication(sys.argv)
# 2. 控件操作
widget = QWidget()
widget.move(100, 200)
widget.resize(300, 400)
print("-" * 20, "widget.show() 之前", "-" * 20)
print("widget x(): ", widget.x())
print("widget y(): ", widget.y())
print("widget width(): ", widget.width())
print("widget height(): ", widget.height())
print("widget geometry(): ", widget.geometry())
# 3. 展示控件
widget.show()
print("-" * 20, "widget.show() 之后", "-" * 20)
print("widget x(): ", widget.x())
print("widget y(): ", widget.y())
print("widget width(): ", widget.width())
print("widget height(): ", widget.height())
print("widget geometry(): ", widget.geometry())
# 4. 应用程序的执行,进入到消息循环
sys.exit(app.exec_())
如上,我们在代码中打印了两遍 geomertry()
,一次是在控件显示之前,一次是在控件显示之后,两次的结果是不一样的,第二次结果是正确的。
这里笔者的推测是,在 .show()
方法之前,控件还没完全渲染,导致其参数缺失,但是由于继承的关系,所以我们在控件显示之前获取 geomertry()
其实是其父类的参数。