PyQt5 QWidget控件详解:坐标系统与几何属性管理
本文深入解析PyQt5中QWidget基类的核心功能,重点阐述屏幕与窗口内部坐标系统的区别。详细讲解x(), y(), width(), height()等几何函数的具体含义,区分客户区与包含边框的窗口几何结构。通过resize, move, setGeometry等常用函数的代码示例,展示如何精确控制窗口位置、大小及图标显示,帮助开发者掌握GUI界面布局的基础技巧。
QWidget基础概述
作为所有用户界面对象的根基,QWidget类构成了PyQt5图形界面的核心。无论是顶层窗口还是子控件,均直接或间接继承自该类,从而具备渲染、事件处理和几何管理等基本能力。
窗口坐标系统
PyQt5采用统一的坐标体系来定位控件位置及尺寸,理解该体系是进行界面布局的关键。

屏幕坐标系以屏幕左上角为原点(0, 0),向右为x轴正方向,向下为y轴正方向。该坐标系主要用于确定顶层窗口在屏幕上的绝对位置。
窗口内部同样拥有独立的坐标系,其原点位于客户区(即除去标题栏和边框的绘图区域)的左上角。x轴向右延伸,y轴向下延伸,客户区四周环绕着标题栏和窗口边框。

基于上述坐标体系,相关的成员函数可归纳为以下三类:
- 由QWidget直接提供的函数,如x()和y()用于获取整个窗口左上角的屏幕坐标,而width()和height()则返回客户区的宽度和高度。
- 通过geometry()对象获取的属性,其中x()和y()返回的是客户区左上角相对于窗口的坐标,width()和height()返回客户区的宽度和高度。
- 通过frameGeometry()对象获取的属性,x()和y()返回整个窗口(含标题栏和边框)左上角的屏幕坐标,width()和height()则代表包含边框在内的整个窗口尺寸。
从几何结构来看,QWidget主要涉及两种状态:
不包含外部边框的客户区几何结构。
包含标题栏和边框的整体窗口几何结构。
客户区常用操作函数
用于调整客户区的大小。
QWidget.resize(width, height)
获取客户区的整体尺寸。
QWidget.size()
分别获取客户区的宽度和高度数值。
QWidget.width()
QWidget.height()
固定客户区的宽度和高度(在特定维度上限制其可变性)。
QWidget.setFixedWidth(int width)
QWidget.setFixedHeight(int height)
QWidget.setFixedSize(int width, int height)
设置窗口在屏幕上的位置(允许动态调整)。
QWidget.setGeometry(int x, int y, int width, int height)
包含边框的窗口常用操作函数
获取窗口的整体大小和屏幕位置。
QWidget.frameGeometry()
移动窗口在屏幕上的位置。
QWidget.move(int x, int y)
获取窗口左上角的屏幕坐标。
QWidget.pos()
屏幕坐标系统应用示例
from PyQt5.QtWidgets import QApplication,QMainWindow,QWidget,QPushButton
import sys
app=QApplication(sys.argv)
#窗口
widget=QWidget()
#按钮继承在窗口中,并实例化
btn=QPushButton(widget)
#按钮命名
btn.setText('button')
#以QWdiget左上角为(0,0)点,按钮移动到坐标处
btn.move(20,20)
#不同的操作系统可能对窗口的最小宽度有规定,若设置宽度小于规定值,则会以规定值进行显示
widget.resize(300,200)
#以屏幕左上角为(0,0)的点,窗口移动到指定坐标处
widget.move(250,200)
widget.setWindowTitle('pyqt坐标系统例子')
widget.show()
#输出窗口的rect(x,y,width,height)
print('QWidget:')
#x,y获取窗口左上角的坐标
print('w.x()=%d' %widget.x())
print('w.y()=%d' %widget.y())
#width,height获取客户区的宽度与高度
print('w.width()=%d' %widget.width())
print('w.height()=%d' %widget.height())
#客户区的大小
print('客户区的大小:%d' %widget.size())
print('QWidget.geometry')
#x,y获取客户区的左上角坐标(包含窗口的标题与边框部分)
print('widget.geometry().x()=%d' %widget.geometry().x())
print('widget.geometry().y()=%d' %widget.geometry().y())
#width,height获取客户区的宽度与高度
print('widget.geometry().width()=%d' %widget.geometry().width())
print('widget.geometry().height()=%d' %widget.geometry().height())
sys.exit(app.exec_())
运行上述代码后的效果如图,程序输出客户区的相关属性数据。

设置程序图标示例
import sys
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QWidget,QApplication
#创造一个名为Icon的窗口类,继承自Qwidget
class Icon(QWidget):
def __init__(self,parent=None):
super(Icon, self).__init__(parent)
self.initUI()
#初始化窗口
def initUI(self):
#设置窗口在屏幕中的位置与窗口的大小
self.setGeometry(300,300,250,150)
self.setWindowTitle('程序图标')
#设置窗口图标,需要提供图标的路径
self.setWindowIcon(QIcon('E:\pyqt5快速开发与实战\第四章\images\cartoon1.ico'))
if __name__ == '__main__':
app=QApplication(sys.argv)
icon=Icon()
icon.show()
sys.exit(app.exec_())
运行效果如图,成功加载并显示了窗口左上角的应用程序图标。

显示气泡提示信息示例
import sys
from PyQt5.QtGui import QFont
from PyQt5.QtWidgets import QWidget,QApplication,QToolTip
class WinForm(QWidget):
def __init__(self,parent=None):
super(WinForm, self).__init__(parent)
self.initUI()
def initUI(self):
#设置气泡提示信息的字体和大小
QToolTip.setFont(QFont('SansSerif',10))
#设置气泡提示
self.setToolTip('这是一个</b>气泡显示</b>')
self.setGeometry(200,300,400,400)
self.setWindowTitle('气泡提示demo')
if __name__ == '__main__':
app=QApplication(sys.argv)
win=WinForm()
win.show()
sys.exit(app.exec_())
本文详细介绍了PyQt5窗口控件QWidget的详细使用方法,要了解更多关于这方面的知识请查看下面的相关链接
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









