推荐5个适合初学者练手的PyQt开源项目

deer332025-06-03技术文章34

一、PyQt 官方示例项目:从 0 到 1 掌握核心语法

项目简介

这是 PyQt 官方维护的「GUI 开发百科全书」,包含 200 + 示例代码,覆盖布局管理、信号与槽、多线程编程等核心知识点。从基础的 Hello World 到高级的数据库可视化,堪称 PyQt 开发者的 "圣经"。

核心亮点

模块

功能亮点

学习价值

基础控件

QLabel、QPushButton 等 30 + 控件

掌握界面元素的创建与交互

布局系统

QVBoxLayout、QGridLayout

学会自适应屏幕的布局技巧

多线程

避免界面卡顿的异步处理

理解线程与信号的协同工作机制

国际化

多语言切换的完整实现方案

掌握 i18n 和 l10n 的开发流程

代码示例:按钮点击事件

from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.button = QPushButton("点击我", self)
        self.button.clicked.connect(self.on_button_click)  # 信号连接槽函数

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

if __name__ == "__main__":
    app = QApplication([])
    window = MainWindow()
    window.show()
    app.exec_()

项目地址

https://github.com/pyqt/examples


二、My-TODOs:跨平台待办事项管理工具

项目简介

这是一个用 PyQt-SiliconUI 开发的高颜值待办事项应用,支持任务分类、优先级设置、数据持久化存储,完美适配 Windows/macOS/Linux 三大系统。

核心亮点

  • 界面设计:采用 Material Design 风格,支持深色模式和自定义主题
  • 数据存储:通过 INI 文件实现任务的增删改查,支持多用户切换
  • 跨平台兼容:一次编写,三端运行,解决不同系统的 UI 适配难题

代码示例:任务添加功能

from PyQt5.QtWidgets import QLineEdit, QListWidget, QPushButton

class TodoList:
    def __init__(self):
        self.input_box = QLineEdit()
        self.todo_list = QListWidget()
        self.add_button = QPushButton("添加任务")
        self.add_button.clicked.connect(self.add_task)

    def add_task(self):
        task = self.input_box.text().strip()
        if task:
            self.todo_list.addItem(task)
            self.input_box.clear()

项目地址

https://github.com/ChinaIceF/My-TODOs


三、PyQt5+Socket 聊天室:网络编程实战

项目简介

这是一个全功能聊天室应用,支持多人实时聊天、文件传输、历史记录查询。通过 PyQt 实现 GUI 界面,结合 Socket 完成网络通信,是学习 C/S 架构的绝佳案例。

核心亮点

  • 网络通信:基于 TCP 协议实现可靠数据传输
  • 多线程处理:独立线程处理消息收发,避免界面阻塞
  • 数据加密:采用 AES 算法对聊天内容进行加密传输

代码示例:消息发送功能

import socket
from PyQt5.QtCore import QThread, pyqtSignal

class ChatClient(QThread):
    message_received = pyqtSignal(str)

    def __init__(self, host, port):
        super().__init__()
        self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.socket.connect((host, port))

    def send_message(self, message):
        self.socket.sendall(message.encode())

    def run(self):
        while True:
            data = self.socket.recv(1024)
            if not data:
                break
            self.message_received.emit(data.decode())

项目地址

https://github.com/Undertone0809/little_chatroom


四、俄罗斯方块:游戏开发入门

项目简介

经典游戏的 PyQt 实现,包含7 种方块类型、4 级难度、分数统计等功能。通过 QPainter 实现图形渲染,用状态机管理游戏逻辑,是学习事件驱动编程的理想项目。

核心亮点

  • 图形渲染:使用 QPainter 实现像素级绘图
  • 状态管理:游戏状态机设计模式的典型应用
  • 用户交互:支持键盘和鼠标双重控制

代码示例:方块旋转逻辑

from PyQt5.QtGui import QPainter

class Tetromino:
    def __init__(self, shape):
        self.shape = shape
        self.rotation = 0

    def rotate(self):
        self.rotation = (self.rotation + 1) % 4
        # 更新方块坐标矩阵

    def paint(self, painter: QPainter, x, y):
        for i in range(4):
            for j in range(4):
                if self.shape[self.rotation][i][j]:
                    painter.fillRect(x + j*30, y + i*30, 28, 28)

项目地址

https://github.com/yooongchun/Tetris


五、PyQtImageViewer:图像处理实战

项目简介

这是一个专业级图像查看器,支持多格式图片浏览(JPG/PNG/BMP)、鼠标缩放平移、EXIF 信息查看。通过 QGraphicsView 实现图像渲染,是学习图像处理的经典项目。

核心亮点

  • 图像渲染:支持百万像素级大图的高效显示
  • 交互设计:滚轮缩放、右键菜单、快捷键操作
  • 元数据解析:自动读取并显示图片的 EXIF 信息

代码示例:图像加载功能

from PyQt5.QtGui import QPixmap

class ImageViewer:
    def __init__(self):
        self.label = QLabel()
        self.label.setScaledContents(True)

    def load_image(self, path):
        pixmap = QPixmap(path)
        if not pixmap.isNull():
            self.label.setPixmap(pixmap)
            self.label.adjustSize()

项目地址

https://gitcode.com/gh_mirrors/py/PyQtImageViewer


欢迎评论区留言,晒一晒你的练手项目!