PyQt的开发与应用(二):创建界面

VibeCoding·九月创作之星挑战赛 10w+人浏览 1k人参与

前言

PyQt5是一个强大的Python图形用户界面(GUI)框架,它结合了Qt库的丰富功能和Python语言的简洁易用。对于初学者来说,创建第一个窗口是踏入GUI编程世界的第一步。本章将引导您了解PyQt5应用程序的基本结构,从初始化应用程序到创建并显示一个简单的窗口,为您后续深入学习打下坚实基础。

通过本章学习,您将掌握PyQt5应用程序的核心组件及其作用,理解事件循环机制的重要性,并能够创建具有基本功能的图形界面窗口。

1.创建一个窗口

1.1了解过程:

第一步:打好地基和建立指挥中心 (QApplication)


在你开始砌砖建墙之前,你需要先:

申请建筑许可 (初始化):你告诉系统(你的电脑操作系统):“嘿,我要开始建一个PyQt5的应用程序了”,并把可能需要的材料清单(命令行参数)交上去。

设立一个项目指挥中心 (QApplication实例):这个指挥中心非常重要,它将:

负责调度所有资源:比如字体、颜色主题等。

开启一个永动的消息循环 (事件循环):这个循环会一直问:“用户点按钮了吗?”“有键盘输入吗?”“窗口需要重画了吗?”。一旦有事情发生,它就立刻安排相应的部分去处理。没有这个循环,你的房子就像没了电,灯不会亮,门也不会开。

管理所有的门窗 (窗口管理):创建、关闭、最小化窗口都由它统筹。

简单说:没有这个QApplication指挥中心,你的应用程序就无法运行和响应用户操作。


第二步:搭建主厅的框架 (QMainWindow)


指挥中心设立好后,你就可以开始建造主体结构了。

创建主窗口 (Main Window):这就像是你房子的“主厅”,是用户主要活动的地方。

给主厅挂上名牌 (设置窗口标题):你在主厅最显眼的位置(窗口的标题栏)挂上一个牌子,上面写着“我的第一个应用程序”。这样用户一眼就知道自己在哪里。

规定主厅的大小和位置 (设置几何属性):你决定这个主厅要建多大(比如宽800像素,高600像素),以及它出现在屏幕的哪个位置。


第三步:布置主厅的内部 (添加控件和布局)


一个空荡荡的主厅不好看,你需要往里添加家具和装饰。

设置中央区域 (Central Widget):在主厅的正中间,划出一块最大的空白区域,这是你摆放主要家具的地方。

选择布局方式 (Layout):你决定怎么摆放家具。比如,你选择“垂直布局”,这意味着家具(如标签、按钮)会像叠积木一样,从上到下一个个整齐地排列。

添加家具 - 标签 (QLabel):

你放了一个大沙发(主标题标签)在最上面,上面写着醒目的“欢迎光临!”。

然后在沙发下面放了一个小茶几(副标题标签),上面写着“请随意浏览”。

你还可以调整这些家具的样式:给沙发换上蓝色的沙发套(设置背景色),用更大的字体写上字(设置字体),让文字居中显示(设置对齐方式)。


第四步:亮灯并开放参观 (显示与执行)


当所有设计和布置都完成后:

发出“亮灯”指令 (window.show()):你让指挥中心发出信号,让主厅的所有灯都亮起来,这样用户就能透过窗户(屏幕)看到里面精美布置了。

正式开放参观 (启动事件循环 app.exec_()):最后,你启动那个永动的消息循环。指挥中心开始7x24小时工作,等待访客(用户)的互动。比如,当访客点击一个按钮(你将来会添加的),指挥中心就会收到消息并做出反应。


表格展示各个功能

步骤核心组件类比目的
1. 初始化QApplication设立项目指挥中心为应用程序提供核心动力和管理,处理所有底层通信。
2. 创建窗口QMainWindow搭建主厅的框架为用户提供一个可见的、可交互的主容器窗口。
3. 设置标题setWindowTitle()给主厅挂上名牌告知用户当前窗口的用途或名称。
4. 添加内容QLabel, QVBoxLayout在主厅内布置家具向用户展示信息、图片或提供交互控件。
5. 显示运行.show(), .exec_()亮灯并开放参观让窗口可见,并开始持续响应各种用户和系统事件。

1.2 创建过程的代码示例:

import sys
from PyQt5.QtWidgets import QApplication,QWidget,QLabel

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = QWidget()
    window.setWindowTitle("标题名称")
    window.resize(1000,1000)
    window.move(100,101)
    label = QLabel("你好,这是一个窗口!", window)
    label.move(150, 130)
    window.show()
    app.exec()

输出结果

创建出来是这个样子的:

左上角的名称就是你使用setWindowTietle输入的标题名称

 

1.3 QApplication

QApplication PyQt5 应用程序的核心类,负责管理应用程序的控制流和主要设置。每个 PyQt5 应 用程序都必须创建一个 QApplication 实例,并且在整个应用程序生命周期中只能存在一个QApplication 实例。
1.3.1 主要职责
事件循环QApplication 管理应用程序的事件循环(Event Loop),这是 GUI 应用程序的核心
机制。事件循环不断地监听用户输入(如鼠标点击、键盘输入)、系统事件(如窗口关闭、重绘请
求)并分发这些事件给相应的控件进行处理。
初始化和配置QApplication 初始化应用程序的 GUI 环境,包括窗口系统、字体、样式等。
解析命令行参数QApplication 可以解析命令行参数(如 -style , -font 等),并根据这些参
数配置应用程序的行为。
全局设置QApplication 提供了许多全局设置,例如设置应用程序的默认字体、全局样式表
QSS)、获取屏幕信息等。
1.3.2 常用方法
exec_() :启动应用程序的事件循环。事件循环是一个无限循环,它会一直运行,直到应用程序
退出时才会停止。
quit() :退出应用程序。
setStyle(str) :设置应用程序的样式。
setFont(QFont) :设置应用程序的默认字体。
setStyleSheet(str) :设置全局样式表(QSS),类似于 HTML CSS

1.4 QWidget

QWidget 是 PyQt5 中所有用户界面对象的基类。它可以用来创建窗口、对话框、控件等。每个窗口或 控件都可以看作是一个 QWidget 的实例。

1.3.1 主要职责
窗口管理QWidget 可以作为窗口使用,支持设置窗口标题、大小、位置等。
控件容器QWidget 可以作为其他控件的容器,用于布局管理。
事件处理QWidget 可以处理各种事件,如鼠标点击、键盘输入等。
1.3.2 常用方法
setWindowTitle(str) :设置窗口的标题。
resize(int, int) :设置窗口的大小。
move(int, int) :移动窗口的位置。
show() :显示窗口。
hide() :隐藏窗口。
close() :关闭窗口。

1.5 app.exec()

app.exec_() QApplication 的核心方法之一,用于启动应用程序的事件循环。事件循环是 GUI
用程序的核心机制,它不断地监听和处理用户输入(如鼠标点击、键盘输入)、系统事件(如窗口关 闭、重绘请求)并将这些事件分发给相应的控件进行处理。
1.5.1 工作原理
事件循环:事件循环是一个无限循环,它会一直运行,直到应用程序退出时才会停止。在事件循环
中,PyQt5 不断地检查是否有新的事件发生(如用户点击按钮、窗口需要重绘等),并将这些事件
分发给相应的控件进行处理。
阻塞式执行app.exec_() 是一个阻塞式方法,意味着它会一直运行,直到应用程序退出。在此
期间,程序的其他部分不会继续执行,直到事件循环结束
在 Qt 应用程序的主函数中,通常会看到类似以下代码结构:
int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    // 创建窗口和其他对象
    MainWindow window;
    window.show();
    return app.exec();
}
 

app.exec() 返回一个整数值,通常作为程序的退出码。这个值会传递给操作系统的进程管理系统,用于指示程序是否正常结束。

2.PyQt中验证sys.argv的作用

在PyQt应用程序中,sys.argv是用于处理命令行参数的标准方法。它允许从命令行传递参数给应用程序,例如配置选项、文件路径或其他运行时设置。

2.1 验证sys.argv的重要性

验证sys.argv可以确保应用程序接收到的参数是有效的,避免因无效参数导致的运行时错误或未定义行为。常见的验证场景包括:

  • 检查参数数量是否符合预期
  • 验证参数类型是否正确
  • 确保文件路径参数存在且可访问

2.2实现方法

from PyQt5.Qt import *
import sys

#打印列表,第一个元素为脚本名称
print(sys.argv)

#创建QApplication的实例
app = QApplication(sys.argv)
#arguments()返回一个包含所有命令行参数的列表
print(f"arguments:{app.arguments()}")


#qApp,是QApplication的一个全局实例,qApp始终指向正在运行的QApplication的实例,qApp和app都可以来访问命令行的参数
print(f'qApp:{qApp.arguments()}')

1. sys.argv的输出 直接打印Python内置模块sys.argv列表,第一个元素始终是脚本名称(如'test.py'),后续元素为命令行传入的参数。

2. app.arguments()的输出 通过QApplication实例的arguments()方法获取参数列表,其内容与sys.argv完全一致。

3. qApp.arguments()的输出 通过PyQt5全局变量qApp(指向当前QApplication实例)获取参数列表,结果与前两者相同

2.2.1常见用途

  • 指定配置文件路径
  • 启用调试模式
  • 传递初始窗口大小或位置
  • 加载特定文件或数据

2.2.2最佳实践

  • 始终验证参数数量
  • 为关键参数提供默认值
  • 提供清晰的错误信息和用法说明

3.窗口拓展

当我们使用QWidget.move(x, y)移动了窗口的位置时,应用程序窗口会固定显示在主屏幕(如果有副屏 的话)对应坐标上。所以我们做了一个扩展:让应用程序的窗口跟随鼠标的位置进行显示鼠标光标在 那个屏幕上,我们的窗口就显示在那个屏幕上。并且使窗口居中。

3.1QCursor的使用

PyQt5 中, QCursor 是一个用于管理和操作鼠标光标的类。它属于 PyQt5.QtGui 模块,主要用于 设置和获取鼠标的光标样式、位置以及自定义光标等。 QCursor 类的主要作用是控制鼠标光标的外观和行为。通过 QCursor ,你可以:
设置不同的光标样式:例如,箭头、手型、等待状态等。
获取当前光标的位置:可以获取鼠标在屏幕上的当前位置。
自定义光标:可以使用自定义的图像作为光标。
设置光标的位置:可以将鼠标移动到指定的屏幕坐标

3.1.1常用功能

设置光标样式
QCursor 提供了许多内置的光标样式,可以通过 Qt.CursorShape 枚举来设置不同的光标样式。常见 的光标样式包括:
Qt.ArrowCursor :默认的箭头光标。
Qt.IBeamCursor :文本输入时的“I”型光标。
Qt.WaitCursor :等待状态的沙漏或旋转光标。
Qt.PointingHandCursor :手型光标,通常用于超链接。
Qt.SizeAllCursor :四向箭头光标,表示可以拖动对象。
Qt.CrossCursor :十字光标,通常用于绘图或选择区域。
获取当前光标的位置
你可以使用 QCursor.pos() 方法获取鼠标在屏幕上的当前位置。返回值是一个 QPoint 对象,包含鼠标的 x y 坐标。
设置光标的位置
你可以使用 QCursor.setPos(x, y) 方法将鼠标移动到指定的屏幕坐标。
自定义光标
除了使用内置的光标样式,你还可以使用自定义的图像作为光标。你可以通过 QPixmap 加载图像并将 其传递给 QCursor 构造函数。

3.1.2常用方法

以下是 QCursor 类的一些常用方法:
1.QCursor(Qt.CursorShape shape)
作用:创建一个具有指定样式的光标。
参数
shape :光标的样式,使用 Qt.CursorShape 枚举值,如 Qt.ArrowCursor
Qt.IBeamCursor 等。
2.pos()
作用:获取当前鼠标光标在屏幕上的位置。
返回值:返回一个 QPoint 对象,包含鼠标的 x y 坐标。
3.setPos(int x, int y)
作用:将鼠标光标移动到指定的屏幕坐标。
参数
x :目标位置的 x 坐标。
y :目标位置的 y 坐标。
4.setShape(Qt.CursorShape shape)
作用:设置光标的样式。
参数
shape :光标的样式,使用 Qt.CursorShape 枚举值。
5.shape()
作用:获取当前光标的样式。
返回值:返回当前光标的样式,类型为 Qt.CursorShape

4.总结:

本章系统介绍了使用PyQt5创建第一个图形界面的完整过程。我们从PyQt5应用程序的核心组件QApplication入手,讲解了其在管理事件循环、初始化设置和协调窗口行为中的关键作用。随后详细介绍了QWidget作为所有界面元素基类的重要性和常用方法。

通过实际代码示例,我们演示了如何创建一个带有标题的基本窗口,并添加简单的文本标签。此外,我们还探讨了命令行参数sys.argv的处理方式,以及如何利用QCursor类实现窗口位置的高级控制,如使窗口跟随鼠标位置并居中显示。

关键知识点总结:

  1. QApplication是PyQt5应用的核心,负责事件循环管理和应用程序初始化

  2. QWidget是所有界面元素的基类,可用于创建窗口和控件

  3. app.exec()启动事件循环,使应用程序能够响应用户交互

  4. sys.argv处理命令行参数,为应用程序提供灵活的配置方式

  5. QCursor类管理鼠标光标,可实现窗口位置的智能定位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值