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

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

相关文章:

  • 利用多AI协作实现AI编辑器高效开发:创新架构与实践基本构想
  • 【typenum】 1 说明文件(README.md)
  • 【金仓数据库征文】政府项目数据库迁移:从MySQL 5.7到KingbaseES的蜕变之路
  • 数据库故障排查指南大纲
  • Tailwind CSS v4 主题化实践入门(自定义 Theme + 主题模式切换)✨
  • 边缘计算从专家到小白
  • MySQL开篇
  • vscode 中 tasks.json schema
  • 前端面试每日三题 - Day 30
  • AtCoder Beginner Contest 405(CD)
  • Qt中在子线程中刷新UI的方法
  • Day28 -js开发01 -JS三个实例:文件上传 登录验证 购物商城 ---逻辑漏洞复现 及 判断js的payload思路
  • MySQL:视图
  • 前端弹性布局:用Flexbox构建现代网页的魔法指南
  • Linux 离线安装 Docker 和 Docker Compose 最新版 的完整指南
  • 微机控制电子式持久蠕变慢应变应力腐蚀试验机
  • MATLAB安装常见问题及解决方案详解(含代码示例)
  • 在 Kubernetes 中使用 Docker 实现 GPU 支持的完整方案
  • Android 13 使能user版本进recovery
  • 智能商品推荐系统技术路线图
  • 江苏省委社会工作部部长等多人拟在省志愿服务联合会任职
  • 拿出压箱底作品,北京交响乐团让上海观众享受音乐盛宴
  • 江西省直机关工委副书记熊亮华履新宜春市委常委、宣传部部长
  • 保利42.41亿元竞得上海杨浦东外滩一地块,成交楼面单价超8万元
  • 上海发布预付卡消费“10点提示”:警惕“甩锅闭店”套路
  • 城管给商户培训英语、政银企合作纾困,上海街镇这样优化营商环境