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

2024-03-30 15:44

本文主要是介绍【使用 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 为小部件和窗口之间以及您自己的代码之间进行通信所提供的机制。

这篇关于【使用 PyQt6-第01章】 创建基本的应用程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/861890

相关文章

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

使用Sentinel自定义返回和实现区分来源方式

《使用Sentinel自定义返回和实现区分来源方式》:本文主要介绍使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Sentinel自定义返回和实现区分来源1. 自定义错误返回2. 实现区分来源总结Sentinel自定

Pandas使用SQLite3实战

《Pandas使用SQLite3实战》本文主要介绍了Pandas使用SQLite3实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1 环境准备2 从 SQLite3VlfrWQzgt 读取数据到 DataFrame基础用法:读