【使用 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

相关文章

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没