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

news2025/5/11 22:56:47

在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.coloradmin.cn/o/2373484.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT6 源(82):阅读与注释日历类型 QCalendar,本类并未完结,儒略历,格里高利历原来就是公历,

&#xff08;1&#xff09;本代码来自于头文件 qcalendar . h &#xff1a; #ifndef QCALENDAR_H #define QCALENDAR_H#include <limits>#include <QtCore/qglobal.h> #include <QtCore/qlocale.h> #include <QtCore/qstring.h> #include <QtCore/…

CVE体系若消亡将如何影响网络安全防御格局

CVE体系的核心价值与当前危机 由MITRE运营的通用漏洞披露&#xff08;CVE&#xff09;项目的重要性不容低估。25年来&#xff0c;它始终是网络安全专业人员理解和缓解安全漏洞的基准参照系。通过提供标准化的漏洞命名与分类方法&#xff0c;这套体系为防御者建立了理解、优先级…

OpenKylin安装Elastic Search8

一、环境准备 Java安装 安装过程此处不做赘述&#xff0c;使用以下命令检查是否安装成功。 java -version 注意&#xff1a;Elasticsearch 自 7.0 版本起内置了 OpenJDK&#xff0c;无需单独安装。但如需自定义 JDK&#xff0c;可设置 JAVA_HOME。 二、安装Elasticsearch …

【ARM AMBA AHB 入门 3 -- AHB 总线介绍】

请阅读【ARM AMBA 总线 文章专栏导读】 文章目录 AHB Bus 简介AHB Bus 构成AHB BUS 工作机制AHB 传输阶段 AHB InterfacesAHB仲裁信号 AHB 数据访问零等待传输(no waitstatetransfer)等待传输(transfers with wait states)多重传送(multipletransfer)--Pipeline AHB 控制信号 A…

多模态大模型中的视觉分词器(Tokenizer)前沿研究介绍

文章目录 引言MAETok背景方法介绍高斯混合模型&#xff08;GMM&#xff09;分析模型架构 实验分析总结 FlexTok背景方法介绍模型架构 实验分析总结 Emu3背景方法介绍模型架构训练细节 实验分析总结 InternVL2.5背景方法介绍模型架构 实验分析总结 LLAVA-MINI背景方法介绍出发点…

sqli-labs靶场第二关——数字型

一&#xff1a;查找注入类型&#xff1a; 输入 ?id1--与第一关的差别&#xff1a;报错; 说明不是字符型 渐进测试&#xff1a;?id1--&#xff0c;结果正常&#xff0c;说明是数字型 二&#xff1a;判断列数和回显位 ?id1 order by 3-- 正常&#xff0c; 说明有三列&am…

[模型选择与调优]机器学习-part4

七 模型选择与调优 1 交叉验证 (1) 保留交叉验证HoldOut HoldOut Cross-validation&#xff08;Train-Test Split&#xff09; 在这种交叉验证技术中&#xff0c;整个数据集被随机地划分为训练集和验证集。根据经验法则&#xff0c;整个数据集的近70%被用作训练集&#xff…

【计算机网络-数据链路层】以太网、MAC地址、MTU与ARP协议

&#x1f4da; 博主的专栏 &#x1f427; Linux | &#x1f5a5;️ C | &#x1f4ca; 数据结构 | &#x1f4a1;C 算法 | &#x1f152; C 语言 | &#x1f310; 计算机网络 上篇文章&#xff1a;传输层-TCP协议TCP核心机制与可靠性保障 下篇文章&#xff1a; 网络…

Kafka 与 RabbitMQ、RocketMQ 有何不同?

一、不同的诞生背景&#xff0c;塑造了不同的“性格” 名称 背景与目标 产品定位 Kafka 为了解决 LinkedIn 的日志收集瓶颈&#xff0c;强调吞吐与持久化 更像一个“可持久化的分布式日志系统” RabbitMQ 出自金融通信协议 AMQP 的实现&#xff0c;强调协议标准与广泛适…

【MATLAB源码-第277期】基于matlab的AF中继系统仿真,AF和直传误码率对比、不同中继位置误码率对比、信道容量、中继功率分配以及终端概率。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 在AF&#xff08;放大转发&#xff09;中继通信系统中&#xff0c;信号的传输质量和效率受到多个因素的影响&#xff0c;理解这些因素对于系统的优化至关重要。AF中继通信的基本架构由发射端、中继节点和接收端组成。发射端负…

webRtc之指定摄像头设备绿屏问题

摘要&#xff1a;最近发现&#xff0c;在使用navigator.mediaDevices.getUserMedia({ deviceId: ‘xxx’}),指定设备的时候&#xff0c;video播放总是绿屏&#xff0c;发现关闭浏览器硬件加速不会出现&#xff0c;但显然这不是一个最好的方案; 播放后张这样 修复后 上代码 指定…

2023年03月青少年软件编程(图形化)等级考试四级编程题

求和 1.准备工作 &#xff08;1&#xff09;保留舞台中的小猫角色和白色背景。 2.功能实现 &#xff08;1&#xff09;计算1&#xff5e;100中&#xff0c;可以被3整除的数之和&#xff1b; &#xff08;2&#xff09;说出被3整除的数之和。 标准答案&#xff1a; 参考程序&…

ensp的华为小实验

1.先进行子网划分 2.进行接口的IP地址配置和ospf的简易配置&#xff0c;先做到全网小通 3.进行ospf优化 对区域所有区域域间路由器进行一个汇总 对区域1进行优化 对区域2.3进行nssa设置 4.对ISP的路由进行协议配置 最后ping通5.5.5.5

ragflow报错:KeyError: ‘\n “序号“‘

环境&#xff1a; ragflowv 0.17.2 问题描述&#xff1a; ragflow报错&#xff1a;KeyError: ‘\n “序号”’ **1. 推荐表&#xff08;输出json格式&#xff09;** [{"},{},{"},{} ]raceback (most recent call last): May 08 20:06:09 VM-0-2-ubuntu ragflow-s…

FHE与后量子密码学

1. 引言 近年来&#xff0c;关于 后量子密码学&#xff08;PQC, Post-Quantum Cryptography&#xff09; 的讨论愈发热烈。这是因为安全专家担心&#xff0c;一旦有人成功研发出量子计算机&#xff0c;会发生什么可怕的事情。由于 Shor 算法的存在&#xff0c;量子计算机将能够…

CSS: 选择器与三大特性

标签选择器 标签选择器就是选择一些HTML的不同标签&#xff0c;由于它们的标签需求不同&#xff0c;所以CSS需要设置标签去选择它们&#xff0c;为满足它们的需求给予对应的属性 基础选择器 标签选择器 <!DOCTYPE html> <head><title>HOME</title>…

M0基础篇之ADC

本节课使用到的例程 一、Single模式例程基本配置的解释 在例程中我们只使用到了PA25这一个通道&#xff0c;因此我们使用的是Single这个模式&#xff0c;也就是我们在配置模式的时候使用的是单一转换。 进行多个通道的测量我们可以使用Sequence这个模式。 二、Single模式例程基…

OSPF综合实验实验报告

OSPF综合实验实验报告 一、实验拓扑 二、实验要求 1.R5为ISP&#xff0c;其上只能配置IP地址&#xff1b;R4作为企业边界路由器&#xff0c; 出口公网地址需要通过PPP协议获取&#xff0c;并进行chap认证 2&#xff0c;整个OSPF环境IP基于172.16.0.0/16划分&#xff1b; 3&…

vue3+ant design vue + Sortable实现多级表格列拖动

1、最近遇到个需求&#xff0c;需使用vue3ant design vue Sortable实现多级表格的表头允许用户拖拽移动。即当用户拖拽一级表头时&#xff0c;其对应的子级表头及数据应同步移动&#xff0c;并且只允许一级非固定表头允许拖拽。 2、代码 <a-table:data-source"rowDat…

基于开源链动2+1模式AI智能名片S2B2C商城小程序的分销价格管控机制研究

摘要&#xff1a;本文聚焦开源链动21模式AI智能名片S2B2C商城小程序在分销体系中的价格管控机制&#xff0c;通过解析其技术架构与商业模式&#xff0c;揭示平台如何通过"去中心化裂变中心化管控"双轨机制实现价格统一。研究显示&#xff0c;该模式通过区块链存证技术…