PyQt5基础:QWidget类的全面解析与应用实践

发布于:2025-05-11 ⋅ 阅读:(16) ⋅ 点赞:(0)

在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类有更深入的理解,并在实际编程中灵活运用。


网站公告

今日签到

点亮在社区的每一天
去签到