PySide6 创建第一个应用程序
本教程介绍了使用PySide6和Python创建桌面应用程序的基础知识。首先讲解了如何创建简单的窗口应用,包括导入必要的QtWidgets模块、初始化QApplication和显示QWidget窗口。重点说明了事件循环的工作原理,这是Qt应用程序处理用户交互的核心机制。接着介绍了QMainWindow的使用方法,包括如何继承该类创建自定义窗口、添加中央控件(如QPushButton)以及设置窗口标
在本教程中,我们将学习如何使用 PySide 和 Python 创建桌面应用程序。首先,我们将在桌面上创建一系列简单的窗口,以确保 PySide 正常工作并介绍一些基本概念。然后,我们将简要了解事件循环及其与 Python GUI 编程的关系。最后,我们将介绍 Qt,QMainWindow它提供了一些常用的界面元素,例如工具栏和菜单。这些内容将在后续教程中进行更详细的讲解。
创建应用程序
让我们来创建第一个应用程序!首先,创建一个新的 Python 文件——你可以随意命名(例如 `.python` app.py),并将其保存到易于访问的位置。我们将在这个文件中编写简单的应用程序。
应用程序的源代码如下所示。请逐字逐句地输入,并仔细检查,避免出错。如果出错,Python 会告诉你哪里出了问题。
from PySide6.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 系统上查看。
单步执行代码
让我们一行一行地分析代码,以便准确了解发生了什么。
首先,我们导入应用程序所需的 PySide 类。这里我们导入了QApplication应用程序处理程序和QWidget基本的空GUI 组件,它们都来自该QtWidgets模块。
from PySide6.QtWidgets import QApplication, QWidget
Qt 的主要模块有QtWidgets、QtGui和QtCore。
虽然可以这样做from <module> import *,但这种全局导入在 Python 中通常是不推荐的,所以我们在这里就不这么做了。
接下来,我们创建一个实例QApplication,传入一个包含传递给应用程序的命令行参数的sys.argvPython 对象。list
app = QApplication(sys.argv)
如果您确定不会使用命令行参数来控制 Qt,则可以传入一个空列表,例如:
app = QApplication([])
QWidget接下来,我们使用变量名创建一个实例window。
window = QWidget()
window.show()
在 Qt 中,所有顶级控件都是窗口——也就是说,它们没有父控件,也不嵌套在其他控件或布局中。这意味着理论上你可以使用任何你喜欢的控件来创建窗口。
没有父级的 组件默认是不可见的。因此,创建window对象后,我们必须调用`display: none`方法.show()来使其可见。您可以移除 `display: none`.show()并运行应用程序,但您将无法退出它!
什么是窗口? - 窗口承载着应用程序的用户界面 - 每个应用程序至少需要一个窗口(……但可以有多个) - 默认情况下,当最后一个窗口关闭时,应用程序将退出
最后,我们调用函数app.exec()启动事件循环。
什么是事件循环?
在将窗口显示在屏幕上之前,需要介绍一些关于 Qt 应用程序组织方式的关键概念。如果您已经熟悉事件循环,可以直接跳到下一节。
每个 Qt 应用程序的核心都是该类QApplication。每个应用程序都需要一个(且仅一个)QApplication对象才能正常运行。该对象包含应用程序的事件循环——控制所有用户与 GUI 交互的核心循环。

用户与应用程序的每次交互——无论是按键、点击鼠标还是移动鼠标——都会生成一个事件,该事件会被放入事件队列。在事件循环中,每次迭代都会检查事件队列,如果找到等待处理的事件,则将该事件及其控制权传递给相应的事件处理程序。事件处理程序处理该事件后,会将控制权交还给事件循环,以等待更多事件。每个应用程序只有一个正在运行的事件循环。
该类QApplication包含QApplicationQt 事件循环——只需要一个实例——您的应用程序会一直处于事件循环中等待,直到执行某个操作——任何时候QApplication都只有一个事件循环。
QMainWindow
正如我们在上一部分中了解到的,在 Qt 中,任何控件都可以是窗口。例如,如果您将 `<window>` 替换QWidget为 `<window> QPushButton`。在下面的示例中,您将得到一个包含单个可点击按钮的窗口。
Martin Fitzpatrick 的《使用 PyInstaller 打包 Python 应用程序》 ——本分步指南将引导您完成 Python 应用程序的打包,从简单的示例到完整的安装程序和签名可执行文件。
import sys
from PySide6.QtWidgets import QApplication, QPushButton
app = QApplication(sys.argv)
window = QPushButton("Push Me")
window.show()
app.exec()
这很巧妙,但实际上不太实用——你很少需要一个只包含单个控件的用户界面!但是,正如我们稍后将发现的那样,使用布局将控件嵌套在其他控件中的能力意味着你可以在一个空的控件中构建复杂的用户界面QWidget。
但是,Qt 已经为你提供了一个解决方案——`<Window>` QMainWindow。这是一个预制的窗口组件,它提供了许多你会在应用程序中用到的标准窗口功能,包括工具栏、菜单、状态栏、可停靠的窗口组件等等。我们稍后会介绍这些高级功能,但现在,我们先QMainWindow在应用程序中添加一个简单的空窗口组件。
import sys
from PySide6.QtWidgets import QApplication, QMainWindow
app = QApplication(sys.argv)
window = QMainWindow()
window.show()
# Start the event loop.
app.exec()
运行它!现在您将看到主窗口。它看起来和之前一模一样!
所以,我们QMainWindow目前的内容还不太吸引人。我们可以通过添加一些内容来改善这一点。如果您想创建一个自定义窗口,最好的方法是创建一个子类QMainWindow,然后在__init__代码块中包含窗口的设置。这样可以确保窗口行为的独立性。我们可以添加自己的子类——为了简单起见,可以QMainWindow将其命名为 ` <window>`。MainWindow
import sys
from PySide6.QtCore import QSize, Qt
from PySide6.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 组件始终从 `<Qt_namespace>` 命名空间导入QtWidgets,`<Qt_namespace>` 和 `<Qt_namespace>` 类也是如此QMainWindow。QApplication使用 `<Qt_namespace>` 时,QMainWindow我们使用.setCentralWidget`<Qt_namespace>` 将组件(这里是一个 `<Qt_namespace>` QPushButton)放置在 `<Qt_namespace>` 中QMainWindow——默认情况下,它会占据整个窗口。我们将在布局教程中学习如何向窗口添加多个组件。
当你继承 Qt 类时,必须始终调用 super__init__函数,以便 Qt 可以设置对象。
在我们的__init__代码块中,我们首先使用 ` .setWindowTitle()title` 函数更改主窗口的标题。然后,我们将第一个控件——一个按钮QPushButton——添加到窗口中间。这是 Qt 中可用的基本控件之一。创建按钮时,您可以传入按钮要显示的文本。
最后,我们调用.setCentralWidget()窗口函数。这是一个QMainWindow特定的函数,允许您设置位于窗口中间的控件。
运行它!现在你会看到窗口再次打开,但这次小部件会出现QPushButton在窗口中间。按下按钮不会有任何反应,我们接下来会解决这个问题。

我们的产品可在 Windows、macOS 和 Linux 系统上QMainWindow运行。QPushButton
我们稍后会详细介绍更多控件,但如果您迫不及待想直接了解,可以查看QWidget 文档。尝试将不同的控件添加到您的窗口中!
调整窗口和控件的大小
目前窗口可以自由调整大小——用鼠标抓住窗口的任意一角,即可拖动并将其调整到任意大小。虽然允许用户调整应用程序窗口大小是件好事,但有时您可能需要限制窗口的最小或最大尺寸,或者将窗口锁定为固定大小。
在 Qt 中,窗口大小是通过一个QSize对象来定义的。该对象接受宽度和高度两个参数,顺序必须一致。例如,以下代码将创建一个400x300 像素的固定大小窗口。
import sys
from PySide6.QtCore import QSize, Qt
from PySide6.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()
运行它!你会看到一个固定大小的窗口——尝试调整它的大小,不会有任何效果。

我们的窗口大小固定,请注意,在 Windows 和 Linux 系统上,最大化控件已被禁用。在 macOS 系统上,您可以将应用程序最大化以填满屏幕,但中央控件不会调整大小。
.setFixedSize()您还可以分别调用 ` setMinimum`.setMinimumSize()和.setMaximumSize()`setMaximum` 函数来设置最小和最大尺寸。不妨自己尝试一下!
您可以在任何小部件上使用这些尺寸调整方法。
在本节中,我们介绍了QApplication类、QMainWindow事件循环,并尝试向窗口添加一个简单的控件。下一节我们将探讨 Qt 提供的控件和窗口之间以及它们与用户代码之间通信的机制
更多推荐


所有评论(0)