实战PyQt5: 004-控件之祖QWidget
程序员文章站
2022-05-28 11:03:40
...
PyQt5中的GUI 控件
PyQt是Python图形用户接口(Graphical User Interface, 简称GUI)应用开发中流行的图形开发界面库。
在GUI应用中,一个典型的窗口坐标系统如图1所示:
GUI窗口坐标示意图
屏幕左上角为坐标原点,即(0,0)点,从左到右为X轴正向,从上到下为Y轴正向。整个屏幕的坐标系统就用顶层窗口的坐标系统。
在窗口内部也有自己的坐标系统,该坐标系统以客户区的左上角为原点,从左向右为x轴正方向,从上到下为y轴正方向,在客户区周围有标题栏和边框。
在PyQt中,每个GUI控件称之为小部件(widget)。所有的GUI控件都直接或者间接从QWidget继承而来,可以通俗地看成,QWidget为所有GUI部件的祖先,其他GUI部件都是QWidget的子孙。
QWidget简介
QWidget继承自QObject,因此所有继承自QWidget所有的小部件(widget)都支持信号和槽机制。QWidget类实现了一个GUI控件所必须的一些属性和功能。一个GUI控件具有以下一些属性和功能:
每个控件都是矩形的,它们按照Z轴顺序排序(垂直于桌面),在相同位置,前面的控件如果在可视状态,则会覆盖后面的控件,其常见特性包括:
- 控件由其父控件和前面的控件裁剪;
- 没有父控件的控件就是一个窗口;
- 具有最小最大空间尺寸;
- 外形控制(边,颜色,文本字体等等);
- 事件响应(鼠标,键盘,手势操作等);
- 内建信号和槽函数。
注: 为了叙述方便,在以后的文字中, 不区分控件和部件的称呼差异,二者表示同一含义。
QWidget窗口基本元素如下图所示:
QWidget控件窗口示意图
QWidget的常用控制窗口大小和位置的方法有:
- resize(): 改变客户区的大小;
- size(): 获得客户区的大小;
- width(): 获得客户区的宽;
- height(): 获得客户区的高度;
- setFixedWidth(): 将客户区宽度设置为固定值,不可以通过鼠标来改变窗口的宽度;
- setFixedHeight(): 将客户区高度设置为固定值,不可以通过鼠标来改变窗口的高度;
- setFixedSize(): 将客户区大小设置为固定值,不可以通过鼠标来改变窗口的大小;
- setGeometry(): 同时改变客户区的大小和位置;
- geometry(): 获得客户区的大小和位置;
- frameGeometry(): 获得窗口的大小和位置;
- move(): 设置窗口的位置;
- pos(): 获得窗口左上角的位置。
QWidget其他一些常用方法:
- setWindowTitle(): 设置窗口标题信息
- show(): 显示窗口
- hide(): 隐藏窗口
注:客户区指的是不包含边框的部分,客户区加边框一般称作窗口区。
QtWidget类继承关系:
测试QWidget
创建文件qwidget.py, 改变窗口的位置和大小,并打印到终端窗口中。代码如下:
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtCore import QSize
if __name__ == '__main__':
app = QApplication(sys.argv)
wid = QWidget()
wid.setWindowTitle('实战PyQt5: QWidget Demo!')
wid.resize(400, 280)
wid.show()
#在终端窗口中输出一些数据信息
print('QWidget:')
#x,y获取窗口左上角的坐标
print('widget.x()=%d' %wid.x())
print('widget.y()=%d' %wid.y())
#width, height获取客户区的宽度与高度
print('widget.width()=%d' %wid.width())
print('widget.height()=%d' %wid.height())
print('')
print('QWidget.geometry')
print("widget.geometry().x() = %d " %wid.geometry().x())
print("widget.geometry().y() = %d " %wid.geometry().y())
print("widget.geometry().width() = %d " %wid.geometry().width())
print("widget.geometry().height() = %d " %wid.geometry().height())
print('')
print('QWidget.frameGeometry')
print("widget.frameGeometry().x() = %d " %wid.frameGeometry().x())
print("widget.frameGeometry().y() = %d " %wid.frameGeometry().y())
print("widget.frameGeometry().width() = %d " %wid.frameGeometry().width())
print("widget.frameGeometry().height() = %d " %wid.frameGeometry().height())
sys.exit(app.exec())
测试结果如下图所示:
QWidget窗口参数测试
本文知识点
- GUI窗口坐标系统;
- QWidget窗口系统的基本元素;
- 方法geometry()和frameGeometry()的区别;