欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

实战PyQt5: 004-控件之祖QWidget

程序员文章站 2022-05-28 11:03:40
...

PyQt5中的GUI 控件

PyQt是Python图形用户接口(Graphical User Interface, 简称GUI)应用开发中流行的图形开发界面库。

在GUI应用中,一个典型的窗口坐标系统如图1所示:

实战PyQt5: 004-控件之祖QWidget

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窗口基本元素如下图所示:

实战PyQt5: 004-控件之祖QWidget

QWidget控件窗口示意图

QWidget的常用控制窗口大小和位置的方法有:

  • resize(): 改变客户区的大小;
  • size(): 获得客户区的大小;
  • width(): 获得客户区的宽;
  • height(): 获得客户区的高度;
  • setFixedWidth(): 将客户区宽度设置为固定值,不可以通过鼠标来改变窗口的宽度;
  • setFixedHeight(): 将客户区高度设置为固定值,不可以通过鼠标来改变窗口的高度;
  • setFixedSize(): 将客户区大小设置为固定值,不可以通过鼠标来改变窗口的大小;
  • setGeometry(): 同时改变客户区的大小和位置;
  • geometry(): 获得客户区的大小和位置;
  • frameGeometry(): 获得窗口的大小和位置;
  • move(): 设置窗口的位置;
  • pos(): 获得窗口左上角的位置。

QWidget其他一些常用方法:

  • setWindowTitle(): 设置窗口标题信息
  • show(): 显示窗口
  • hide(): 隐藏窗口

注:客户区指的是不包含边框的部分,客户区加边框一般称作窗口区。

QtWidget类继承关系:

实战PyQt5: 004-控件之祖QWidget

 

测试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())

测试结果如下图所示:

实战PyQt5: 004-控件之祖QWidget

QWidget窗口参数测试

本文知识点

  • GUI窗口坐标系统;
  • QWidget窗口系统的基本元素;
  • 方法geometry()和frameGeometry()的区别;

前一篇:实战PyQt5: 003-PyQt的信号和槽机制简介