当前位置: 首页 > ds >正文

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

http://www.xdnf.cn/news/5324.html

相关文章:

  • LinkedList源码解析
  • stm32 lcd绘制波形和频谱
  • android HashMap和List该如何选择
  • Go多服务项目结构优化:为何每个服务单独设置internal目录?
  • ChatBI选型指南:主流产品技术对比与落地建议
  • 【Docker 新手入门指南】第四章:镜像加速
  • 相机Camera日志分析之八:高通Camx HAL架构opencamera三级日志详解及关键字
  • [6-2] 定时器定时中断定时器外部时钟 江协科技学习笔记(41个知识点)
  • JMeter 中实现 双 WebSocket(双WS)连接
  • 【Linux实践系列】:进程间通信:万字详解共享内存实现通信
  • 系统分析与设计期末复习
  • 高效全能PDF工具,支持OCR识别
  • ThinkPad T440P如何从U盘安装Ubuntu24.04系统
  • QMK键盘固件开发全解析:QMK 固件开发的最新架构和规范(2025最新版)
  • [亲测搭建可用]LoliMeow主题二次元风博客WordPress主题模板
  • Android 关闭Activity切换过渡动画
  • 栈溢出攻击最基本原理
  • 宝塔服务安装使用的保姆级教程
  • Redis 集群
  • 安装或更新 CUDA Toolkit - Ubuntu - RuntimeError
  • CAD属性图框值与Excel联动(CAD块属性导出Excel、excel更新CAD块属性)——CAD c#二次开发
  • WPF中如何自定义控件
  • 【Oracle认证】MySQL 8.0 OCP 认证考试英文版(MySQL30 周年版)
  • #Redis黑马点评#(四)优惠券秒杀
  • Fabric系列 - SoftHSM 软件模拟HSM
  • 前端SSE技术详解:从入门到实战的完整指南
  • C++泛型编程(二):现代C++特性
  • 常见的降维算法
  • 采用SqlSugarClient创建数据库实例引发的异步调用问题
  • 【Qt/C++】深入理解 Lambda 表达式与 `mutable` 关键字的使用