PyQt5基础:QWidget类的全面解析与应用实践
在Python的GUI编程领域,PyQt5是一个强大且广泛应用的库。其中,QWidget类作为所有用户界面对象的基类,是构建丰富多样用户界面的基础。今天,我们就来深入了解QWidget类及其相关应用。
QWidget类概述
QWidget类是PyQt中所有窗口和控件的根基,无论是窗口还是控件,都直接或间接继承自它。在PyQt里,没有嵌入到其他控件中的控件被称作窗口,一般具备边框和标题栏;而像按钮、复选框等则属于控件,是构成程序的基本元素。一个程序能够包含多个窗口,一个窗口也可以容纳多个控件。
窗口坐标系统
PyQt采用统一的坐标系统来定位窗口和控件的位置与大小。屏幕左上角为原点(0, 0),从左向右是x轴正向,从上向下是y轴正向,这个坐标系统用于定位顶层窗口。同时,窗口内部也有自己的坐标系统,同样以左上角为原点,其原点、x轴、y轴围成的区域是客户区,周围则是标题栏和边框。
QWidget提供了不同的成员函数来获取窗口和客户区的位置与大小信息,主要分为三类:
- QWidget直接提供的成员函数:x()、y()可获取窗口左上角的坐标,width()、height()能得到客户区的宽度和高度。
- QWidget的geomtry()提供的成员函数:x()、y()用于获取客户区左上角的坐标,width()、height()可获得客户区的宽度和高度。
- QWidget的frameGeometry()提供的成员函数:x()、y()可获取窗口左上角的坐标,width()、height()能得到包含客户区、标题栏和边框在内的整个窗口的宽度和高度。
QWidget常用几何结构及函数
不包含边框的常用函数
不包含边框的部分通常是客户区,是我们操作和添加子控件的区域。相关常用函数如下:
- 改变客户区面积:使用QWidget.resize(width, height)或QWidget.resize(QSize) 函数,可改变客户区大小,设置后还能用鼠标调整。
- 获得客户区大小:通过QWidget.size() 函数获取。
- 获得客户区宽度和高度:使用QWidget.width() 和QWidget.height() 函数。
- 设置客户区宽度和高度:QWidget.setFixedWidth(int width)可固定高度,只允许改变宽度;
- QWidget.setFixedHeight(int height)则固定宽度,允许改变高度;
- QWidget.setFixedSize(QSize size)或QWidget.setFixedSize(int width, int height)可同时固定高度和宽度,禁止鼠标改变。若要同时改变客户区大小和位置,可使用QWidget.setGeometry(int x, int y, int width, int height)或QWidget.setGeometry(QRect rect)函数。
包含边框的常用函数
虽然没有直接设置边框大小的函数,但可通过不包含边框的函数间接设置。相关常用函数有:
- 获得窗口的大小和位置:使用QWidget.frameGeometry() 函数。
- 设置窗口的位置:通过QWidget.move(int x, int y)或QWidget.move(QPoint point)函数。
- 获得窗口左上角的坐标:使用QWidget.pos() 函数。
创建第一个PyQt5应用
建立主窗口
以下是一个简单的创建主窗口的示例代码:
import sys
from PyQt5.QtWidgets import QApplication,QWidget app=QApplication(sys.argv)
window=QWidget()
window.resize(300,200)
window.move(250,150)
window.setWindowTitle('Hello PyQt5')
window.show()
sys.exit(app.exec_())
代码分析:
-
-*- coding:UTF-8 - *-:为避免中文乱码问题,UTF - 8是一种针对Unicode的可变长度字符编码,能确保程序在多平台正常显示中文。
- import sys 和 from PyQt5.QtWidgets import QApplication,QWidget:载入必需的模块,Qt5中基本的GUI窗口控件都在PyQt5.QtWidgets模块中。
- app=QApplication(sys.argv) :每个PyQt程序都需要一个QApplication对象,sys.argv 是命令行参数列表。
- window=QWidget():创建一个QWidget对象作为窗口,若不为控件指定父对象,它将被当作窗口处理。
- window.resize(300,200) :设置窗口宽度为300像素,高度为200像素。
- window.move(250,150):设置窗口初始化位置。
- window.setWindowTitle(‘Hello PyQt5’):设置窗口标题。
- window.show() :将窗口显示在屏幕上。
- sys.exit(app.exec_():进入程序主循环,接收并分发事件消息,使用sys.exit() 确保程序完整结束。
设置程序图标
以下代码展示了如何为PyQt5应用添加个性化图标:
import sys
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QWidget,QApplication 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('./images/cartoon1.ico')) if __name__ == '__main__': app=QApplication(sys.argv) icon=Icon() icon.show() sys.exit(app.exec_())
这里采用了面向对象的编程风格,创建了一个继承自QWidget的Icon类。通过setWindowIcon()方法设置程序图标,需要传入一个QIcon类型的对象,该对象的构造函数需提供图标路径。
显示气泡提示信息
为了让界面更加人性化,可使用气泡提示信息。示例代码如下:
import sys
from PyQt5.QtWidgets import QWidget, QToolTip , QApplication
from PyQt5.QtGui import QFont class Winform(QWidget): def __init__(self): super().__init__() 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_())
通过调用setToolTip()方法创建气泡提示,该方法接受富文本格式的参数,同时使用QToolTip.setFont() 方法设置提示信息的字体和字号。
总之,QWidget类在PyQt5中扮演着至关重要的角色,掌握其相关知识和应用,能帮助我们构建出更加丰富、实用的用户界面。希望大家通过本文的介绍,对QWidget类有更深入的理解,并在实际编程中灵活运用。