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

以屏幕的左上角为原点,即(0,0)点,从左向右为x轴正向,从上向下为y轴正向,整个屏幕的坐标系统就用来定位顶层窗口的。
此外,在窗口内部也有自己的坐标系统,该坐标系统仍然以左上角作为原点,从左向右为x轴正向,从上向下为y轴正向,原点、x轴、y轴围成的区域叫作ClientArea(客户区),在客户区的周围则是标题栏(Window Title)和边框(Frame)。
如图所示是Qt提供的分析QWidget几何结构的一张图,在帮助文档的“Window and Dialog Widgets”中可以找到相关的内容介绍。

QWidget直接提供的成员函数:x()、y()获得窗口左上角的坐标,width()、height()获得客户区的宽度和高度。
QWidget的 geometry()提供的成员函数:x()、y()获得客户区左上角的坐标,width()、height(获得客户区的宽度和高度。
QWidget的 frameGeometry()提供的成员函数:x()、y()获得窗口左上角的坐标,width()、height()获得包含客户区、标题栏和边框在内的整个窗口的宽度和高度。
2、常用的几何机构
从图2中可以看出,QWidget有两种常用的几何结构。
不包含外边各种边框的几何结构。包含外边各种边框的几何结构。
1) QWidget不包含边框的常用函数
一般情况下,不包含边框的部分是客户区,这里面就是我们正常操作的地方,可以添加子控件。这部分是一个长方形,会有大小和位置。大小就是指宽度(width)和高度(height);位置就是指这个长方形在屏幕上的位置。在Qt中保存这个长方形使用的是 QRect类,这个类也有自己的大小和位置。要改变其大小和位置,可以使用如下几个函数。
a、改变客户区的面积:
这两个函数改变了长方形的大小,其中第一个参数是宽度,第二个参数是高度。设置了大小的窗口,还可以用鼠标来改变它的大小。
b、获得客户区的大小
c、获得客户区的宽度和高度
d、设置客户区的宽度和高度
使用这个函数,客户区的高度就是固定的,不可以改变,只可以改变宽度。
这时候宽度就是固定,不可以改变,但是可以改变高度。
通过上面这两个函数,高度和宽度都是固定的,不可以通过鼠标来改变窗口的宽度和高度。如果要同时改变客户区的大小和位置,需要用到以下函数。
x和y对应的就是x和y的坐标。可以不单独设置x和y的坐标。
2)QWidget包含边框的常用函数
QWidget包含边框,这个边框有大小和位置,是窗口在屏幕上显示的整个区域。这里没有设置这个边框大小的函数,因为通过上面不包含边框函数的设置,就可以设置包含边框的大小了。通过下面的函数,可以获得整个窗口的位置和大小。
a、获得窗口的大小和位置
b、设置窗口的位置
c、获得窗口左上角的坐标
实例:屏幕坐标系统显示
运行程序,显示效果如下:
