type
status
date
slug
summary
tags
category
icon
password
Last edited time
Oct 22, 2024 11:29 AM
介绍PyQt5信号与槽,布局,基本组件和Qt Designer
📝 主旨内容安装PyQt5创建简单窗口并使用QLabel示例功能概述完整代码示例代码讲解运行结果信号与槽、输入框和按钮交互功能概述信号与槽机制完整代码示例代码讲解运行结果信号与槽总结布局管理器1. 水平和垂直布局示例:创建一个简单的登录框2. 表单布局示例:重写登录框3. 网格布局示例:实现一个简单的计算器Qt Designer的安装与使用1. 安装 Qt Designer2. 使用 Qt Designer 设计界面3. 将 .ui 文件转换为 Python 代码4. 示例:设计一个带按钮和标签的简单窗口5. 总结组件库美化基于gallery示例二次开发🤗 总结归纳📎 参考文章
📝 主旨内容
安装PyQt5
首先,确保你已经安装了 Python 环境。可以使用以下命令安装 PyQt5:
创建简单窗口并使用QLabel
示例功能概述
- 创建一个简单的窗口。
- 设置窗口的标题和大小。
- 在窗口中添加一个文本标签(
QLabel
),并显示一些文字。
完整代码示例
代码讲解
QApplication
和QWidget
QApplication
:这是 PyQt5 应用程序的入口,它管理应用程序的控制流程和主要设置。创建任何 PyQt5 应用程序时,第一步都需要创建一个QApplication
对象。QWidget
:所有的窗口部件(widgets)都继承自QWidget
,它是 PyQt5 中最基本的窗口类。我们在这里继承了QWidget
来创建一个窗口类。
- 设置窗口标题和大小
self.setWindowTitle('第一个 PyQt5 示例')
:设置窗口的标题。self.resize(400, 300)
:设置窗口的大小为 400x300 像素。
- 添加一个
QLabel
QLabel
是一个用于显示文本或图像的控件。在这里,我们创建了一个QLabel
对象,显示 "这是一个简单的文本标签" 的文本。label.move(100, 130)
:设置标签在窗口中的位置,x 轴位置为 100,y 轴位置为 130。
- 主循环
app.exec_()
:这是进入应用程序的主循环,一旦进入这个循环,程序就开始等待用户的操作(例如关闭窗口等)。
运行结果
运行该代码后,你将看到一个简单的窗口,标题为“第一个 PyQt5 示例”,窗口大小为 400x300 像素,中心显示一段文本 “这是一个简单的文本标签”。
信号与槽、输入框和按钮交互
功能概述
- 通过
QLineEdit
创建一个输入框,允许用户输入文本。
- 使用
QPushButton
创建一个按钮,点击按钮时获取输入框的内容并显示到QLabel
上。
- 如果输入框为空,弹出一个警告对话框提示用户输入内容。
信号与槽机制
在 PyQt5 中,信号和槽用于实现事件处理。信号表示某种事件(例如按钮被点击),而槽是处理该事件的函数。当信号发出时,槽就会被调用。
完整代码示例
代码讲解
QLineEdit
输入框QLineEdit
是用于输入文本的控件,用户可以在这个控件中输入任意的文本。self.input_field.setPlaceholderText('请输入一些文本')
:设置提示文本,当输入框为空时显示这个提示,帮助用户理解输入框的作用。
QPushButton
按钮QPushButton
是按钮控件,点击按钮时会触发相应的操作。在这里,我们创建了一个名为 "显示输入" 的按钮。self.button.clicked.connect(self.on_button_click)
:这是信号与槽机制的关键。clicked
是QPushButton
自带的信号,表示按钮被点击。我们将这个信号连接到了自定义的槽函数on_button_click
,这样当按钮被点击时,on_button_click
函数就会被执行。
- 槽函数
on_button_click
- 在槽函数
on_button_click
中,首先我们使用self.input_field.text()
获取输入框中的内容。 - 如果输入框有内容,就将其显示在
QLabel
上,显示格式为您输入了: xxx
。 - 如果输入框为空,弹出一个警告对话框,使用
QMessageBox.warning
显示提示,要求用户输入内容。
QVBoxLayout
布局管理器- 在本示例中,我们使用了一个简单的垂直布局(
QVBoxLayout
)来排列控件。 - 通过
layout.addWidget(self.input_field)
,将控件按顺序添加到布局中,窗口的主布局设置为该布局。
- 弹出警告框
QMessageBox.warning
- 当输入框为空时,我们使用
QMessageBox.warning
弹出一个警告框。这个对话框会提示用户 “输入框不能为空”。
运行结果
- 窗口中会显示一个输入框,一个按钮,以及一个用于显示结果的标签。
- 用户在输入框中输入内容,然后点击按钮,输入的内容会显示在标签上。
- 如果用户没有输入任何内容就点击按钮,会弹出一个警告对话框,提示输入框不能为空。
信号与槽总结
在 PyQt5 中,信号与槽是用于响应用户操作(如按钮点击、输入框改变等)的机制。信号表示事件,槽表示对事件的响应。在这个示例中,按钮的点击信号
clicked
与槽函数 on_button_click
连接,使得用户点击按钮时会执行获取输入框内容的操作。布局管理器
在 PyQt5 中,布局管理器用于控制窗口中控件的排列方式。常用的布局包括:
- 水平布局(QHBoxLayout):将控件水平排列。
- 垂直布局(QVBoxLayout):将控件垂直排列。
- 表单布局(QFormLayout):常用于表单界面,控件通常以标签和输入框的形式成对出现。
- 网格布局(QGridLayout):将控件放置在表格网格中,可以自由控制行和列的位置。
1. 水平和垂直布局示例:创建一个简单的登录框
在这个示例中,我们将使用水平和垂直布局来创建一个简单的登录框。
完整代码示例:水平和垂直布局
代码讲解
- 水平布局
QHBoxLayout
QHBoxLayout
会将控件按水平方向排列。在这个示例中,我们将用户名的标签和输入框放在一个水平布局中,同样的,密码的标签和输入框也放在另一个水平布局中。
- 垂直布局
QVBoxLayout
QVBoxLayout
会将控件按垂直方向排列。我们使用垂直布局将用户名行、密码行以及登录按钮按顺序垂直排列。
- 混合使用布局
- 通过
vbox.addLayout(hbox1)
,我们将水平布局hbox1
(包含用户名的标签和输入框)放入垂直布局vbox
中,这样可以实现更复杂的布局方式。
运行结果
你将看到一个简单的登录窗口,用户名和密码输入框水平排列,登录按钮位于输入框下方。
2. 表单布局示例:重写登录框
表单布局(
QFormLayout
)非常适合用于表单类界面,控件通常以 标签-输入框 的形式成对出现。我们用表单布局来重写登录框。完整代码示例:表单布局
代码讲解
QFormLayout
QFormLayout
是一种表单布局,常用于将控件以 标签-控件 的方式配对展示。在这个示例中,我们将用户名和密码标签与相应的输入框放在表单布局中。
form_layout.addRow()
addRow()
方法用于向表单布局中添加控件。我们通过addRow('用户名:', self.username_input)
的方式,向表单布局中添加了一行,第一列是标签,第二列是输入框。
运行结果
窗口的布局更加简洁,用户名和密码的标签与输入框成对出现,按钮位于下方。
3. 网格布局示例:实现一个简单的计算器
最后,我们使用网格布局(
QGridLayout
)来实现一个简单的四则运算计算器。完整代码示例:网格布局
代码讲解
- 网格布局
QGridLayout
QGridLayout
用于将控件放置在表格网格中。在这个示例中,我们将按钮按照 4x4 的网格排列。
addWidget()
- 使用
addWidget()
方法将按钮添加到网格中。每个按钮都根据其所在的行和列的位置被放入布局中。
- 计算器按钮
- 我们定义了 16 个按钮,其中包括数字键、运算符和清除(C)以及等号(=)键,并将这些按钮放置在相应的网格位置上。
运行结果
你将看到一个简单的计算器界面,按钮按照 4x4 网格排列,顶部有一个用于显示输入和结果的文本框。
小结
在这一部分中,我们介绍了 PyQt5 中的四种常用布局:
- 水平布局(QHBoxLayout):将控件水平排列。
- 垂直布局(QVBoxLayout):将控件垂直排列。
- 表单布局(QFormLayout):常用于表单类界面,控件以 标签-输入框 的形式成对出现。
- 网格布局(QGridLayout):将控件放置在表格网格中,适合复杂的界面布局,如计算器。
通过这些布局,你可以设计出各种不同的界面结构,使应用程序更加美观和实用。
好的,接下来是 PyQt5 教程的第四部分:Qt Designer 的安装与使用。
Qt Designer
是 Qt 框架提供的一个图形界面设计工具,允许用户通过拖拽组件的方式快速创建用户界面(UI),然后将生成的 .ui
文件与 Python 代码结合使用。Qt Designer的安装与使用
1. 安装 Qt Designer
Qt Designer
是 Qt 工具套件的一部分,但如果你仅仅使用 PyQt5 进行开发,可能需要单独安装它。安装 Qt Designer
的方式有以下几种。方式一:使用
pip
安装 PyQt5 工具包你可以通过安装
pyqt5-tools
来获取 Qt Designer
。在终端运行以下命令:安装完成后,
pyqt5-tools
会提供 Qt Designer
。要启动 Qt Designer
,你可以在终端中输入以下命令:注意:如果系统找不到 pyqt5-tools 相关的可执行文件,你可以去手动找到它的安装路径,例如在 site-packages/pyqt5_tools/Qt/bin/ 中。
方式二:从 Qt 官方网站下载完整的 Qt 开发环境
2. 使用 Qt Designer 设计界面
安装完成后,你就可以使用
Qt Designer
创建图形界面了。以下是使用 Qt Designer
设计一个简单窗口的步骤。步骤 1:创建新的 UI 文件
- 打开
Qt Designer
,选择Main Window
作为窗口模板(你也可以选择其他模板,如Dialog
或Widget
)。
- 点击 “Create”,创建一个新的主窗口。
步骤 2:添加控件
- 在界面的左侧工具栏中,你可以找到各种控件(如
QLabel
、QPushButton
、QLineEdit
等)。
- 拖拽你想要使用的控件到设计区域中,并将它们摆放到适合的位置。例如,你可以拖拽一个
QLabel
和一个QPushButton
放到窗口中。
- 使用右侧的属性编辑器(Property Editor)修改控件的属性,例如修改
QLabel
的文本内容,修改按钮的标题等。
步骤 3:保存设计好的界面
- 完成界面设计后,点击 “File” -> “Save As”,将设计好的界面保存为一个
.ui
文件(例如main_window.ui
)。
3. 将 .ui
文件转换为 Python 代码
设计界面后,我们需要将
.ui
文件转换为 Python 可用的代码。方式一:使用
pyuic5
命令转换- PyQt5 提供了
pyuic5
工具,用于将.ui
文件转换为 Python 代码。你可以在终端运行以下命令来进行转换:
main_window.ui
:这是通过Qt Designer
保存的.ui
文件。
main_window.py
:这是生成的 Python 文件。
执行此命令后,
main_window.py
文件将包含用于创建该 UI 的 Python 代码。方式二:在代码中直接加载
.ui
文件除了将
.ui
文件转换为 Python 代码外,你还可以在运行时直接加载 .ui
文件。这种方式不需要事先转换文件。以下是如何在代码中加载 .ui
文件的示例:在这个示例中,
loadUi('main_window.ui', self)
直接加载 .ui
文件并将其作为主窗口的界面。这样可以避免手动转换 .ui
文件。4. 示例:设计一个带按钮和标签的简单窗口
假设我们在
Qt Designer
中设计了一个简单的窗口,包含一个 QLabel
和一个 QPushButton
。点击按钮时,标签会显示一段文本。步骤 1:设计 UI
- 在
Qt Designer
中,创建一个主窗口,拖拽一个QLabel
和一个QPushButton
放置在窗口中。
- 修改
QLabel
的objectName
为label
,并将按钮的objectName
修改为button
,这样我们在 Python 代码中可以方便地引用这些控件。
- 保存为
simple_window.ui
。
步骤 2:转换 UI 文件(可选)
你可以通过
pyuic5
命令将 simple_window.ui
转换为 Python 文件,也可以直接在代码中加载这个 .ui
文件。步骤 3:编写交互逻辑
接下来,我们编写代码,点击按钮后标签显示文本:
运行结果
- 运行该代码后,窗口会加载我们在
Qt Designer
中设计的 UI。窗口中会有一个按钮和一个标签。
- 当你点击按钮时,标签的文本会变为 “按钮已点击!”。
5. 总结
通过
Qt Designer
,你可以以可视化的方式创建界面,设计过程变得更加直观和高效。你只需拖拽控件到界面上,然后设置相应的属性即可。设计完成后,你可以将 .ui
文件转换为 Python 代码,也可以直接在运行时加载 .ui
文件,极大地简化了用户界面开发的流程。这一部分介绍了
Qt Designer
的安装和使用,希望你能借助这个工具,快速设计并实现更复杂的 GUI 应用。组件库美化
基于C++ Qt/PyQt/PySide的流畅设计小部件库。让Qt再次伟大(基于该组件库进行Qt Designer是付费的,手搓yyds,好在作者提供了详细的文档和示例代码)
PyQt-Fluent-Widgets
zhiyiYo • Updated Oct 22, 2024
基于gallery示例二次开发
🤗 总结归纳
整体教程基本上虽然短,但是基本上够用,能够直接上手了
虽然看起来像羊了个羊,人靠衣装马靠鞍,套个UI就好看了
📎 参考文章
- 作者:ziuch
- 链接:https://ziuch.com/article/PyQt5-Simple-Tutorial
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章