【使用 PyQt6-第01章】 创建基本的应用程序

使用 PyQt6 创建您的第一个应用程序

目录

  • 一、说明
  • 二、创建应用程序
  • 三、单步执行代码
  • 四、什么是事件循环?
    • 4.1 Qt 中的事件循环。
  • 五、主窗口 QMainWindow
  • 六、调整窗口和小部件的大小

一、说明

   本教程也适用于 PySide6 、 PySide2 和 PyQt5

   在本教程中,我们将学习如何使用 PyQt6 通过 Python 创建桌面应用程序。首先,我们将在桌面上创建一系列简单的窗口,以确保 PyQt 正常工作并介绍一些基本概念。然后我们将简要了解一下事件循环以及它与 Python 中的 GUI 编程的关系。最后我们将看看 Qt,QMainWindow它提供了一些有用的通用界面元素,例如工具栏和菜单。这些将在后续教程中进行更详细的探讨。

二、创建应用程序

   让我们创建我们的第一个应用程序!要开始创建一个新的 Python 文件,您可以将其命名为任何您喜欢的名称(例如app.py)并将其保存在可访问的位置。我们将在此文件中编写简单的应用程序。

   我们将在此文件中进行编辑,您可能想返回到代码的早期版本,因此请记住定期备份。

   该应用程序的源代码如下所示。逐字输入,注意不要出错。如果你确实搞砸了,Python 会让你知道出了什么问题。

from PyQt6.QtWidgets import QApplication, QWidget# Only needed for access to command line arguments
import sys# You need one (and only one) QApplication instance per application.
# Pass in sys.argv to allow command line arguments for your app.
# If you know you won't use command line arguments QApplication([]) works too.
app = QApplication(sys.argv)# Create a Qt widget, which will be our window.
window = QWidget()
window.show()  # IMPORTANT!!!!! Windows are hidden by default.# Start the event loop.
app.exec()# Your application won't reach here until you exit and the event
# loop has stopped.

   首先,启动您的应用程序。您可以像任何其他 Python 脚本一样从命令行运行它,例如 –

   运行!您现在将看到您的窗口。 Qt 会自动创建一个带有普通窗口装饰的窗口,您可以像任何窗口一样拖动它并调整它的大小。

   您将看到的内容取决于您运行此示例的平台。下图显示了 Windows、macOS 和 Linux (Ubuntu) 上显示的窗口。
在这里插入图片描述

   我们的窗口,如 Windows、macOS 和 Linux 上所示。

三、单步执行代码

   让我们逐行浏览代码,以便我们准确地了解发生了什么。

   首先,我们导入应用程序所需的 PyQt 类。在这里,我们从模块导入QApplication应用程序处理程序和QWidget基本的空QtWidgetsGUI 小部件。

from PyQt6.QtWidgets import QApplication, QWidget

   Qt 的主要模块是QtWidgets、QtGui和QtCore。

   你可以这样做,from import *但这种全局导入在 Python 中通常是不良好的习惯,所以我们在这里避免它。

   接下来我们创建一个 的实例QApplication,传入sys.arg,它是list包含传递给应用程序的命令行参数的 Python。

app = QApplication(sys.argv)

   如果您知道您不会使用命令行参数来控制 Qt,您可以传入一个空列表,例如

app = QApplication([])

   QWidget接下来我们使用变量 name创建 a 的实例window。

window = QWidget()
window.show()

   在 Qt 中,所有顶级小部件都是窗口——也就是说,它们没有父级,也没有嵌套在另一个小部件或布局中。这意味着您可以在技术上使用您喜欢的任何小部件创建窗口。

   没有父级的 小部件默认是不可见的。因此,创建window对象后,我们必须始终调用.show()以使其可见。您可以删除.show()并运行该应用程序,但您无法退出它!

   什么是窗户? - 保存应用程序的用户界面 - 每个应用程序至少需要一个(…但可以有更多) - 应用程序将(默认情况下)在最后一个窗口关闭时退出

   最后,我们调用app.exec()启动事件循环。

四、什么是事件循环?

   在将窗口显示在屏幕上之前,需要介绍一些有关 Qt 世界中应用程序如何组织的关键概念。如果您已经熟悉事件循环,则可以安全地跳到下一部分。

   每个 Qt 应用程序的核心是QApplication类。每个应用程序都需要一个(而且只需要一个)QApplication对象来运行。该对象保存应用程序的事件循环——控制所有用户与 GUI 交互的核心循环。
在这里插入图片描述

4.1 Qt 中的事件循环。

   与应用程序的每次交互(无论是按下按键、单击鼠标还是移动鼠标)都会生成一个事件,该事件被放置在事件队列中。在事件循环中,每次迭代都会检查队列,如果发现等待事件,则将该事件和控制权传递给该事件的特定事件处理程序。事件处理程序处理该事件,然后将控制权传递回事件循环以等待更多事件。每个应用程序只有一个正在运行的事件循环。

   该类QApplication-QApplication保存 Qt 事件循环 - 需要一个实例 - 您的应用程序在事件循环中等待,直到采取操作 -任何时候都QApplication只有一个事件循环在运行

五、主窗口 QMainWindow

   正如我们在上一部分中发现的,在 Qt 中任何小部件都可以是窗口。例如,如果您替换QtWidget为QPushButton.在下面的示例中,您将看到一个窗口,其中有一个可按的按钮。

import sys
from PyQt6.QtWidgets import QApplication, QPushButtonapp = QApplication(sys.argv)window = QPushButton("Push Me")
window.show()app.exec()

   这很简洁,但实际上并不是很有用——您很少需要一个仅包含单个控件的 UI!但是,正如我们稍后将发现的,使用布局将小部件嵌套在其他小部件中的能力意味着您可以拥有空的QWidget.

   但是,Qt 已经为您提供了一个解决方案—— QMainWindow.这是一个预制的小部件,提供了许多您将在应用程序中使用的标准窗口功能,包括工具栏、菜单、状态栏、可停靠小部件等。稍后我们将介绍这些高级功能,但现在,我们将向QMainWindow我们的应用程序添加一个简单的空。

import sys
from PyQt6.QtWidgets import QApplication, QMainWindowapp = QApplication(sys.argv)window = QMainWindow()
window.show()# Start the event loop.
app.exec()

   运行!您现在将看到主窗口。看上去和以前一模一样!

   所以我们QMainWindow目前并不是很有趣。我们可以通过添加一些内容来解决这个问题。如果您想创建自定义窗口,   最好的方法是子类化QMainWindow,然后将窗口的设置包含在__init__块中。这允许窗口行为是独立的。我们可以添加我们自己的子类QMainWindow- 调用它MainWindow以保持简单。

import sysfrom PyQt6.QtCore import QSize, Qt
from PyQt6.QtWidgets import QApplication, QMainWindow, QPushButton
# Subclass QMainWindow to customize your application's main window
class MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("My App")button = QPushButton("Press Me!")# Set the central widget of the Window.self.setCentralWidget(button)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()

   对于此演示,我们使用的是QPushButton.核心 Qt 小部件始终从命名空间导入QtWidgets,就像QMainWindow和QApplication类一样。使用时QMainWindow,我们通常.setCentralWidget将一个小部件(此处为 a QPushButton)放在QMainWindow- 默认情况下它占据整个窗口。我们将在布局教程中了解如何向窗口添加多个小部件。

   当您子类化 Qt 类时,您必须始终调用 super__init__函数以允许 Qt 设置该对象。

   在我们的__init__块中,我们首先用来.setWindowTitle()更改主窗口的标题。然后我们将第一个小部件 - a QPushButton- 添加到窗口的中间。这是 Qt 中可用的基本小部件之一。创建按钮时,您可以传入希望按钮显示的文本。

   最后,我们调用.setCentralWidget()窗口。这是一个QMainWindow特定的功能,允许您设置位于窗口中间的小部件。

   运行!现在您将再次看到窗口,但这次小QPushButton部件位于中间。按下按钮不会执行任何操作,我们接下来会对此进行排序。

   我们的 QMainWindow 在 Windows、macOS 和 Linux 上带有单个 QPushButton。
   我们在 Windows、macOS 和 Linux 上QMainWindow都有一个版本QPushButton。

   我们很快就会详细介绍更多小部件,但如果您不耐烦并想跳到前面,您可以查看QWidget 文档。尝试将不同的小部件添加到您的窗口!

六、调整窗口和小部件的大小

   该窗口目前可以自由调整大小 - 如果您用鼠标抓住任何角落,则可以拖动它并将其调整为您想要的任何大小。虽然让用户调整应用程序的大小是件好事,但有时您可能希望对最小或最大大小进行限制,或者将窗口锁定为固定大小。

   在 Qt 中,大小是使用QSize对象定义的。这按顺序接受宽度和高度参数。例如,以下将创建一个400x300 像素的固定大小窗口。

import sysfrom PyQt6.QtCore import QSize, Qt
from PyQt6.QtWidgets import QApplication, QMainWindow, QPushButton# Subclass QMainWindow to customize your application's main window
class MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("My App")button = QPushButton("Press Me!")self.setFixedSize(QSize(400, 300))# Set the central widget of the Window.self.setCentralWidget(button)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()

   运行!您将看到一个固定大小的窗口 - 尝试调整它的大小,这是行不通的。

   我们的固定大小窗口,请注意,maximize 控件在 Windows 和 Linux 上被禁用。在 macOS 上,您_可以_最大化应用程序以填满屏幕,但中央小部件不会调整大小。
   我们的固定大小窗口,请注意 maximize
   控制在 Windows 和 Linux 上被禁用。在 macOS 上,您可以最大化应用程序以填满屏幕,但中央小部件不会调整大小。

   .setFixedSize()您还可以调用和.setMinimumSize()分别.setMaximumSize()设置最小和最大尺寸。自己尝试一下!

   您可以在任何小部件上使用这些尺寸方法。

   在本节中,我们介绍了QApplication类、QMainWindow类、事件循环,并尝试向窗口添加一个简单的小部件。在下一节中,我们将了解 Qt 为小部件和窗口之间以及您自己的代码之间进行通信所提供的机制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/577863.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新品发布|灵雀云重磅推出大模型 LLMOps 平台

自即日起,灵雀云正式推出大模型 LLMOps 平台 Alauda Machine Learning (简称 AML),AML在整合传统 MLOps 解决方案的基础之上,为大模型/大语言模型场景提供更强大、更易用的功能。灵雀云意在将AML打造成全面覆盖传统 ML…

夏季水域安全管理,AI智能识别算法防溺水视频监控方案

随着夏季的到来,不少人为了一时的痛快凉爽就私自下水游泳,特别是在野外池塘,由于长期无人监管,极易发生人员溺亡事件,如何对池塘水域进行全天候无人值守智能监管,并实现发生人员闯入就立即告警?…

iOS UIFont-实现三方字体的下载和使用

UIFont 系列传送门 第一弹加载本地字体:iOS UIFont-新增第三方字体 第二弹加载线上字体:iOS UIFont-实现三方字体的下载和使用 前言 在上一章我们完成啦如何加载使用本地的字体。如果我们有很多的字体可供用户选择,我们当然可以全部使用本地字体加载方式,可是这样就增加了…

学习Fast-LIO系列代码中相关概念理解

目录 一、流形和流形空间(姿态) 1.1 定义 1.2 为什么要有流形? 1.3 流形要满足什么性质? (1) 拓扑同胚 (2) 可微结构 1.4 欧式空间和流形空间的区别和联系? (1) 区别: (2) 联系: 1.5 将姿态定义在流形上比…

从0到1利用express搭建后端服务

目录 1 架构的选择2 环境搭建3 安装express4 创建启动文件5 express的核心功能6 加入日志记录功能7 日志记录的好处本节代码总结 不知不觉学习低代码已经进入第四个年头了,既然低代码很好,为什么突然又自己架构起后端了呢?我有一句话叫低代码…

javaWeb项目-旅游民宿管理平台系统功能介绍

项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架:ssm、Springboot 前端:Vue、ElementUI 关键技术:springboot、SSM、vue、MYSQL、MAVEN 数据库工具:Navicat、SQLyog 1、JSP技术 JSP(Jav…

视频素材免费无水印软件有哪些?视频素材免费下载素材库

在这个视觉为王的时代,一段精彩的视频能够跨越语言和文化的障碍,触动每一个心灵。对于每一位热血沸腾的视频创作者而言,寻找那些高质量无水印的素材,就像是在无尽的创意海洋中航行,在这段旅程中,我为你精选…

Polar靶场web(三)

期待得到某一件事物的时候,才是最美好的。 签到 发现不能提交,看一下f12 发现提交按钮被禁用了,且最大输入9个字符,我们可以改一下。 现随便提交一个发现要提交ilovejijcxy session文件包含 发现有文件包含,那先包含…

互联网医院APP开发攻略:搭建智能医疗平台

互联网医院APP为患者提供了便捷的就医途径,还为医生和医院提供了更加高效的服务和管理手段。接下来,小编将我们本文将就互联网医院APP的开发攻略,以及如何搭建智能医疗平台进行探讨。 1.确定需求和目标 这包括确定服务对象(患者、…

NO12 蓝桥杯单片机实践之DS1302

1 回顾 DS1302使用电子时钟模式时,使用方法为: (1)将读写寄存器的地址写成数组 (2)时间参数写成数组 (3)调用函数来进行读取实时时间(底层代码.c文件) 2…

一文读懂Unity性能分析工具:MemoryProfiler,教你轻松分析项目性能瓶颈

轻松掌握MemoryProfiler MemoryProfiler的基本概念如何获取MemoryProfileMemoryProfiler内存分析实践正常GC,合理释放对象的引用无法正常GC,对象引用没有合理释放。 总结 MemoryProfiler的基本概念 Unity 性能分析器 (Unity Profiler) 是一种可以用来获取应用程序性…

C语言结构体详解

前言: 何为结构体,结构体又是什么呢,相信有很多小伙伴对结构体还没有一个清楚的概念,今天咱也一起来探讨一下何为结构体,在C语言当中有着许多的数据类型,如char,int,long&#xff0c…