跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python

PyQt5 入门教程:基础与常用控件详解

PyQt5 是 Python 的图形用户界面框架,基于 Qt 库。本教程涵盖安装配置、基础窗口结构及布局管理,并详解 QLabel、QPushButton 等常用控件的使用方法与信号槽机制。通过实战代码示例,帮助开发者快速掌握跨平台桌面应用开发的核心技能,构建美观且功能完善的 GUI 程序。

DotNetGuy发布于 2026/3/28更新于 2026/7/2732 浏览
PyQt5 入门教程:基础与常用控件详解
1. 初识 PyQt5 和安装
1.1 什么是 PyQt5?

PyQt5 是 Python 的图形用户界面 (GUI) 框架,基于强大的 Qt C++ 库。通过它,我们可以用 Python 轻松构建跨平台的桌面应用程序,支持 Windows、macOS 和 Linux。

1.2 在 PyCharm 中安装 PyQt5
  1. 打开 PyCharm:确保已创建或打开一个项目。
  2. 安装 PyQt5:
    • 方法 1(设置):点击 File -> Settings,选择 Project -> Python Interpreter,点击右侧 + 号搜索 PyQt5 并安装。
    • 方法 2(终端):打开底部 Terminal,运行命令:
    pip install PyQt5
    
  3. 验证安装:在终端输入 pip list 查看是否包含 PyQt5。
1.3 编写第一个 PyQt5 应用程序

创建一个简单的窗口显示 "Hello, World!"。

  1. 新建文件:右键项目文件夹,选择 New -> Python File,命名为 main.py。
  2. 编写代码:
import sys
from PyQt5.QtWidgets import QApplication, QLabel, QMainWindow

# 定义主窗口类,继承自 QMainWindow
class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("PyQt5 第一个窗口")
        
        # 创建标签控件
        label = QLabel("Hello, World!", self)
        self.setCentralWidget(label)

# 创建应用程序对象
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
1.4 代码详细解释
  • import sys:用于处理命令行参数及退出程序。
  • QApplication:每个 PyQt5 程序必须有一个实例,管理应用生命周期和事件循环。
  • QMainWindow:主窗口基类,可包含菜单栏、工具栏等。
  • QLabel:用于显示文本或图片的基础控件。
  • setCentralWidget():设置中央控件,填充窗口中间区域。
  • sys.exit(app.exec_()):启动事件循环,保持程序运行直到关闭。
1.5 常见问题排查
  • 未安装:检查 pip list 确认 PyQt5 存在。
  • 解释器错误:确保 PyCharm 使用的 Python 版本与安装环境一致。
  • 窗口不显示:确认调用了 window.show()。
2. 创建 PyQt5 应用程序与布局管理
2.1 基本窗口结构

窗口是 GUI 的核心。除了基础窗口,我们还需要学习如何组织多个控件,使界面更具交互性。

2.2 QWidget 与 QMainWindow 的区别
  • QWidget:所有控件的基类,最基础的窗口控件。
  • QMainWindow:高级窗口控件,继承自 QWidget,支持菜单栏、状态栏等功能。
2.3 布局管理器

布局管理器自动调整控件位置和大小,常见类型包括:

  1. QVBoxLayout:垂直排列(从上到下)。
  2. QHBoxLayout:水平排列(从左到右)。
  3. QGridLayout:网格排列。
  4. QFormLayout:表单排列。
2.4 使用布局管理器示例

以下代码演示了如何在窗口中组合垂直和水平布局:

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

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("PyQt5 布局示例")
        
        # 设置中央控件
        central_widget = QWidget(self)
        self.setCentralWidget(central_widget)
        
        # 垂直布局
        vbox_layout = QVBoxLayout()
        label = QLabel("这是一个标签")
        vbox_layout.addWidget(label)
        
        # 水平布局
        hbox_layout = QHBoxLayout()
        button1 = QPushButton("按钮 1")
        button2 = QPushButton("按钮 2")
        hbox_layout.addWidget(button1)
        hbox_layout.addWidget(button2)
        
        # 嵌套布局
        vbox_layout.addLayout(hbox_layout)
        central_widget.setLayout(vbox_layout)

app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())

说明:

  • QMainWindow 需要设置中央控件 (QWidget)。
  • 先添加标签到垂直布局,再将水平布局添加到垂直布局中,实现灵活排版。
2.5 QGridLayout 网格布局

适合表单或矩阵式布局,指定行和列放置控件。

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

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QGridLayout 示例")
        layout = QGridLayout()
        
        # 添加控件到特定行列
        layout.addWidget(QLabel("标签 1"), 0, 0)
        layout.addWidget(QPushButton("按钮 1"), 0, 1)
        layout.addWidget(QLabel("标签 2"), 1, 0)
        layout.addWidget(QPushButton("按钮 2"), 1, 1)
        
        self.setLayout(layout)

app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
3. 常用控件详解
3.1 QLabel(标签)

用于显示静态文本或图片。

from PyQt5.QtWidgets import QApplication, QLabel, QMainWindow
from PyQt5.QtCore import Qt
import sys

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QLabel 示例")
        label = QLabel("这是一个标签", self)
        label.setAlignment(Qt.AlignCenter)  # 居中对齐
        self.setCentralWidget(label)

app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
3.2 QPushButton(按钮)

触发事件的常用控件。

from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton
import sys

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QPushButton 示例")
        button = QPushButton("点击我", self)
        button.clicked.connect(self.button_clicked)  # 连接信号
        self.setCentralWidget(button)

    def button_clicked(self):
        print("按钮被点击!")

app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
3.3 QLineEdit(单行文本框)

用于输入文本。

from PyQt5.QtWidgets import QApplication, QMainWindow, QLineEdit
import sys

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QLineEdit 示例")
        self.line_edit = QLineEdit(self)
        self.line_edit.setPlaceholderText("请输入文本")
        self.setCentralWidget(self.line_edit)
        
        # 回车键触发
        self.line_edit.returnPressed.connect(self.return_pressed)

    def return_pressed(self):
        text = self.line_edit.text()
        print(f"用户输入:{text}")

app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
3.4 QCheckBox(复选框)

用于勾选选项。

from PyQt5.QtWidgets import QApplication, QMainWindow, QCheckBox
from PyQt5.QtCore import Qt
import sys

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QCheckBox 示例")
        self.checkbox = QCheckBox("同意条款", self)
        self.checkbox.stateChanged.connect(self.checkbox_changed)
        self.setCentralWidget(self.checkbox)

    def checkbox_changed(self, state):
        if state == Qt.Checked:
            print("复选框被勾选")
        else:
            print("复选框未被勾选")

app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
3.5 QComboBox(下拉列表)

用于从选项中选择。

from PyQt5.QtWidgets import QApplication, QMainWindow, QComboBox
import sys

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QComboBox 示例")
        self.combobox = QComboBox(self)
        self.combobox.addItems(["选项 1", "选项 2", "选项 3"])
        self.combobox.currentIndexChanged.connect(self.combobox_changed)
        self.setCentralWidget(self.combobox)

    def combobox_changed(self, index):
        text = self.combobox.currentText()
        print(f"当前选中:{text}")

app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
总结

本教程涵盖了 PyQt5 的安装、基础窗口结构、布局管理以及常用控件的使用。掌握了这些内容,你就具备了开发跨平台桌面应用的基础能力。后续可以深入学习信号槽机制、自定义样式及复杂业务逻辑的实现。

目录

  1. 1. 初识 PyQt5 和安装
  2. 1.1 什么是 PyQt5?
  3. 1.2 在 PyCharm 中安装 PyQt5
  4. 1.3 编写第一个 PyQt5 应用程序
  5. 定义主窗口类,继承自 QMainWindow
  6. 创建应用程序对象
  7. 1.4 代码详细解释
  8. 1.5 常见问题排查
  9. 2. 创建 PyQt5 应用程序与布局管理
  10. 2.1 基本窗口结构
  11. 2.2 QWidget 与 QMainWindow 的区别
  12. 2.3 布局管理器
  13. 2.4 使用布局管理器示例
  14. 2.5 QGridLayout 网格布局
  15. 3. 常用控件详解
  16. 3.1 QLabel(标签)
  17. 3.2 QPushButton(按钮)
  18. 3.3 QLineEdit(单行文本框)
  19. 3.4 QCheckBox(复选框)
  20. 3.5 QComboBox(下拉列表)
  21. 总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • FPGA 调试:PCIe XDMA 链路不通使用 LTSSM 定位问题
  • OpenClaw 本地部署进阶:接入 Telegram 与网页搜索能力
  • Draw.io 官方 MCP Server 配置与使用指南
  • 单链表去重:保留首次出现的绝对值节点
  • KiCad 符号编辑器引脚添加与同步机制解析
  • Faster-Whisper 本地实时语音识别部署实战
  • PowerShell 中激活 Python 虚拟环境的几种办法
  • Web 自动化测试入门:从概念到百度搜索实战
  • 基于 Java 的家庭药品管理系统设计与实现
  • Kubernetes Gateway API 实战指南:从原理到部署
  • Copilot 登录失败排查指南:7 个关键检查点
  • 国内主流 AI 工具横评:豆包、元宝、千问等七款深度对比
  • 向日葵连接 Ubuntu 22.04 黑屏解决方案
  • Python 金融数据获取:问财 API 全解析与实战
  • SpringBoot 项目整合 OpenFeign 启动失败及运行时常见错误总结
  • Antigravity:谷歌推出的免费 AI 编程工具评测与使用指南
  • WebPlotDigitizer 图表数据提取指南:从图像到精准数值的转换
  • 数据结构:双向循环链表详解
  • LIBERO:终身机器人学习综合基准测试平台
  • Java Web 前端入门:HTML 核心知识点总结

相关免费在线工具

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online