推荐5个适合初学者练手的PyQt开源项目
一、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
欢迎评论区留言,晒一晒你的练手项目!