PyQt5 入门篇:手把手教你打造 Python GUI 应用

PyQt5 是一个非常强大的 Python 库,它可以让你用 Python 编写跨平台的桌面应用程序。PyQt5 基于 Qt 框架,而 Qt 是 C++ 编写的,广泛应用于开发具有图形界面的应用程序。PyQt5 提供了大量的控件,方便你创建窗体、按钮、输入框、标签等控件,构建功能丰富的桌面应用。

本教程将从零开始,手把手教你使用 PyQt5 来创建一个简单的 GUI 应用。我们将创建一个基本的窗口,加入一些常见的控件,并通过 Python 来处理事件和交互。


1. 安装 PyQt5

在开始编程之前,你需要先安装 PyQt5。如果你还没有安装,可以使用以下命令安装:

pip install PyQt5

如果你还需要安装 PyQt5 的工具(如 Qt Designer),可以通过安装 pyqt5-tools

pip install pyqt5-tools

2. 创建一个简单的窗口

首先,创建一个简单的 PyQt5 窗口。这个窗口将展示最基础的元素:一个标签和一个按钮。

示例代码:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QVBoxLayout

# 创建应用类
class MyApp(QWidget):
    def __init__(self):
        super().__init__()

        self.init_ui()

    def init_ui(self):
        # 设置窗口标题和尺寸
        self.setWindowTitle('PyQt5 入门示例')
        self.setGeometry(100, 100, 400, 300)

        # 创建标签和按钮
        self.label = QLabel('Hello, PyQt5!', self)
        self.button = QPushButton('点击我', self)
        self.button.clicked.connect(self.change_text)  # 连接按钮点击事件

        # 创建垂直布局管理器,并添加控件
        layout = QVBoxLayout()
        layout.addWidget(self.label)
        layout.addWidget(self.button)

        self.setLayout(layout)

    def change_text(self):
        self.label.setText('你点击了按钮!')

# 启动应用
def main():
    app = QApplication(sys.argv)
    ex = MyApp()
    ex.show()  # 显示窗口
    sys.exit(app.exec_())  # 进入应用的主循环

if __name__ == '__main__':
    main()

代码解释:

  1. QWidget 类:是所有 GUI 控件的基类。在这个例子中,我们的窗口类 MyApp 继承了 QWidget,并通过 init_ui 方法进行初始化。
  2. QLabel 控件:显示文本或图像。在 init_ui 中,我们创建了一个标签控件 self.label,并设置了初始文本为 “Hello, PyQt5!”。
  3. QPushButton 控件:创建一个按钮控件。在按钮上,我们通过 clicked.connect() 方法将点击事件与 change_text 方法关联,当按钮被点击时,标签的文本会改变。
  4. 布局管理QVBoxLayout 是一个垂直布局管理器,用来管理控件的布局。通过 layout.addWidget() 将控件按顺序添加到布局中,最后通过 setLayout(layout) 设置窗口的布局。
  5. 事件循环:最后,通过 app.exec_() 启动应用的事件循环,等待用户的操作。

运行结果:

运行上面的代码后,你将看到一个包含标签和按钮的窗口。点击按钮后,标签的文字会从 “Hello, PyQt5!” 变成 “你点击了按钮!”。


3. 添加更多控件

在上面的例子中,我们仅使用了标签和按钮。PyQt5 提供了更多的控件,如文本框、复选框、单选框、下拉框等。接下来,我们添加更多控件来展示如何使用它们。

示例代码:添加更多控件

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QVBoxLayout, QLineEdit, QCheckBox, QRadioButton, QComboBox

class MyApp(QWidget):
    def __init__(self):
        super().__init__()
        self.init_ui()

    def init_ui(self):
        self.setWindowTitle('PyQt5 控件示例')
        self.setGeometry(100, 100, 400, 400)

        # 标签
        self.label = QLabel('请输入你的名字:', self)

        # 文本框
        self.textbox = QLineEdit(self)

        # 复选框
        self.checkbox = QCheckBox('我同意条款和条件', self)

        # 单选框
        self.radiobutton1 = QRadioButton('选项 1', self)
        self.radiobutton2 = QRadioButton('选项 2', self)

        # 下拉框
        self.combobox = QComboBox(self)
        self.combobox.addItem('选择语言')
        self.combobox.addItem('Python')
        self.combobox.addItem('JavaScript')
        self.combobox.addItem('C++')

        # 提交按钮
        self.button = QPushButton('提交', self)
        self.button.clicked.connect(self.submit)

        # 布局
        layout = QVBoxLayout()
        layout.addWidget(self.label)
        layout.addWidget(self.textbox)
        layout.addWidget(self.checkbox)
        layout.addWidget(self.radiobutton1)
        layout.addWidget(self.radiobutton2)
        layout.addWidget(self.combobox)
        layout.addWidget(self.button)

        self.setLayout(layout)

    def submit(self):
        # 获取输入框内容
        name = self.textbox.text()
        # 获取复选框状态
        consent = self.checkbox.isChecked()
        # 获取单选框选择的选项
        option = '选项 1' if self.radiobutton1.isChecked() else '选项 2'
        # 获取下拉框选项
        language = self.combobox.currentText()

        result = f"名字: {name}\n同意条款: {'是' if consent else '否'}\n选择的选项: {option}\n选择的语言: {language}"
        self.label.setText(result)

def main():
    app = QApplication(sys.argv)
    ex = MyApp()
    ex.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

代码解释:

  1. QLineEdit 控件:用于接收文本输入,常用于表单中接收用户的输入。
  2. QCheckBox 控件:复选框,用于提供多个选择项,用户可以选择多个选项。
  3. QRadioButton 控件:单选框,用户只能选择一个选项。
  4. QComboBox 控件:下拉框,可以选择一个项。

运行结果:

  • 在这个版本中,用户可以输入名字,选择是否同意条款,选择单选框中的选项,选择下拉框中的语言,并点击提交按钮。
  • 点击提交后,标签会显示用户的选择结果。

4. 总结

在本教程中,我们使用 PyQt5 创建了一个简单的 Python GUI 应用,包含了常见的控件,如标签、按钮、文本框、复选框、单选框和下拉框等。通过这些控件,我们实现了基本的交互功能。

在 PyQt5 中,布局管理是非常重要的一部分,它帮助我们控制控件在窗口中的排列方式。PyQt5 提供了多种布局管理器,如 QVBoxLayoutQHBoxLayoutQGridLayout 等,可以满足不同的布局需求。

通过不断的学习和实践,你可以掌握更多 PyQt5 的高级功能,构建出功能丰富、界面美观的桌面应用。


继续学习

  • 信号与槽:PyQt5 的核心机制,信号用于发送消息,槽用于处理消息。
  • 自定义控件:你可以根据需求创建自定义控件。
  • 布局管理:深入学习如何使用布局管理器来构建复杂的界面。

希望这篇教程能帮助你顺利入门 PyQt5,开始你的桌面应用开发之旅!