Pygame项目的实用程序包
Project description
PygameTool
一个基于 pygame 的常用组件合集,覆盖文字渲染、按钮/单选框、输入框/下拉框、滚动画布、图形绘制、精灵管理、音频管理、消息弹窗等。专注“拿来即用”,与原生 pygame 事件循环无缝配合。
安装
pip install pygametool-rui
环境与导入
- Python ≥ 3.10(类型语法使用
int | float) import PygameTool不会创建窗口或初始化音频/Tk;按需在你的程序里调用:pygame.init(); pygame.display.set_mode(...)- 音频按需初始化,由
MusicManager的内部懒加载完成 - Tk 根窗口按需创建,由
messageBox.show_message(...)首次调用时创建
快速开始
import pygame
from PygameTool import Text, Canvas
pygame.init()
screen = pygame.display.set_mode((640, 480))
text = Text("Hello PygameTool", x=50, y=50, font_size=28)
canvas = Canvas(screen)
canvas.addSprite(text)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
canvas.handle_event(event)
screen.fill((30, 30, 30))
canvas.draw()
pygame.display.flip()
pygame.quit()
组件总览
Text:多行文本、自动换行、行距、居中/非居中、字体/大小/加粗/斜体/背景色Button:可配置文字/边框/圆角/透明背景,点击回调Radio:单选框,支持队列分组互斥、文字偏移、点击回调InputBox:占位符、密码模式、数字限制、居中/左对齐、剪贴板、重复按键处理、回车回调DropDown:下拉选择(与Canvas/事件循环协作)SeekBar:拖动条,最小/最大值、当前值显示、颜色配置Rectangle/Circle/Line:常见图形绘制,支持颜色字符串/HEX 自动转 RGBCanvas:限定区域绘制与滚动,裁剪绘制、只在激活画布内响应滚轮Sprite:图片加载与绘制,支持居中/缩放/遮罩/动画(GIF 帧控制等)Scrollbar/starfield:滚动条、星空效果(与Canvas/绘制配合)MusicManager:音频懒加载、播放/暂停/恢复/停止、唯一键管理、定时播放、播放序列messageBox:基于 Tk 的消息弹窗,支持单/双按钮与自定义回调PGMessageBox:纯 Pygame 风格弹窗,支持背景图、底部固定按钮与事件绑定functool:颜色名/HEX 转 RGB、构造参数过滤等工具函数starfield:星空效果
常用示例
按钮与单选框
import pygame
from PygameTool import Button, Radio
pygame.init()
screen = pygame.display.set_mode((480, 360))
def on_click():
print("clicked!")
btn = Button(screen, x=240, y=60, w=150, h=40, text="点我", func=on_click)
radio1 = Radio(screen, x=100, y=140, num_queue=1, txt="选项A")
radio2 = Radio(screen, x=180, y=140, num_queue=1, txt="选项B")
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 按钮/单选框通常各自有事件处理方法(如 click/handle),根据你的实现调用
screen.fill((240, 240, 240))
btn.draw()
radio1.draw()
radio2.draw()
pygame.display.flip()
输入框与拖动条
import pygame
from PygameTool import InputBox, SeekBar
pygame.init()
screen = pygame.display.set_mode((600, 400))
ibox = InputBox(x=50, y=60, w=260, h=38, placeholder="输入文本...")
bar = SeekBar(x=50, y=140, w=260, h=12, Min=0, Max=100, value=50, color="DeepSkyBlue")
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
ibox.handle_event(event)
# bar 的拖动在其内部处理,通常只需传递事件或在更新时调用其方法
screen.fill((255, 255, 255))
ibox.draw(screen)
bar.draw(screen)
pygame.display.flip()
图形与精灵
import pygame
from PygameTool import Rectangle, Circle, Line, Sprite
pygame.init()
screen = pygame.display.set_mode((640, 480))
rect = Rectangle(200, 100, 120, 60, fillet=10, color="#00AAFF", is_center=True)
circle = Circle(420, 120, 40, width=3, color="purple", fillColor="#FFEE88")
line = Line(60, 200, 580, 200, width=2, color="orange")
sprite = Sprite("./example.png", x=320, y=340, is_center=True, scale=0.5)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((28, 28, 28))
rect.draw(screen)
circle.draw(screen)
line.draw(screen)
sprite.draw(screen)
pygame.display.flip()
音频与消息弹窗
from PygameTool import MusicManager, messageBox
key = MusicManager.play_sound("click.wav", voice=0.6, times=1)
is_yes = messageBox.show_message("继续操作吗?", title="提示", ok_button="确定", cancel_button="取消")
if is_yes:
print("用户选择:确定")
事件循环与滚动画布
- 在
Canvas中添加的元素(精灵/文本/下拉等),通过canvas.handle_event(event)传递事件; - 只有点击激活的画布会响应滚轮滚动;绘制时自动裁剪到画布区域;
- 下拉元素绘制在最顶层,避免被裁剪;超出画布区域也可显示。
颜色输入规则
- 支持颜色名(如
"red"、"orange")、HEX(如"#00AAFF")、RGB 元组(如(0, 170, 255)); - 所有颜色输入会通过
functool.hex_to_rgb(...)标准化为 RGB。
纯 Pygame 弹窗(PGMessageBox)
-
功能概述
- 使用纯
pygame绘制弹窗;支持背景图片(PNG/JPG/BMP/GIF 静态帧) - 底部固定三按钮:左
确定、中更新(当提供update_text时显示)、右取消;右上角X等同取消 - 每个按钮可绑定回调;按钮文字可自定义;
x,y为弹窗中心坐标
- 使用纯
-
接口示例
import pygame from PygameTool import PGMessageBox pygame.init() screen = pygame.display.set_mode((800, 600)) box = PGMessageBox(x=400, y=300, size=(480, 300), title="提示", message="是否继续?", background_image=None, confirm_text="确定", cancel_text="取消") box.bind_confirm(lambda: print("confirm")) box.bind_cancel(lambda: print("cancel")) box.show() running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False box.handle_event(event) screen.fill((30, 30, 30)) box.draw(screen) pygame.display.flip()
-
关键参数
x,y:弹窗中心坐标;size:尺寸((w, h)或float相对屏幕宽度比例)title、message:标题与正文;Title_Center、Message_Center:标题/正文居中(默认否)background_image:背景图路径(可选);confirm_text/update_text/cancel_text:按钮文字(update_text=None时隐藏)
-
事件绑定
bind_confirm(func)、bind_update(func)、bind_cancel(func);右上角X触发取消事件
-
限制与注意
- 组件不阻塞事件循环;按钮固定在弹窗底部
- 背景图按弹窗内部区域自适应缩放并居中裁剪;GIF 仅加载静态帧
- 字体可用性依赖系统,必要时调整
font_name
许可
MIT License
更新说明(2025-11-16)
-
Text 自动换行与排版优化
- 使用
pygame.font.Font.metrics进行逐字符度量并线性累计,复杂度 O(n),显著提升长文本性能。 - 行首标点避免:换行处遇标点会将前一个非空白字符与标点一起移动到下一行,避免行首出现标点;当两者宽度仍超出有效宽度时,放弃该策略以保证前进。
- 最小宽度保障:有效宽度为
max_width与“最小字符宽度 × 2”中的较大者,避免极端设置导致卡住或不前进。 - 零宽/组合字符兼容:对
advance <= 0的字符不计入宽度累计,避免度量异常影响换行。 - API 不变:继续通过
Text(text, x, y, max_width=..., line_spacing=...)使用;内部自动换行与分页逻辑兼容中文/英文混排。
- 使用
-
使用建议
- 在内容变更或区域尺寸改变时重新创建
Text或调用change_text/change_font_size以刷新内部行缓存。 - 为中文段落设置合适的
max_width与line_spacing,即可获得自然的换行与段落显示效果。
- 在内容变更或区域尺寸改变时重新创建
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
pygametool_rui-0.1.2.tar.gz
(54.2 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pygametool_rui-0.1.2.tar.gz.
File metadata
- Download URL: pygametool_rui-0.1.2.tar.gz
- Upload date:
- Size: 54.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a9cb0426f29a2dae9b25eff4e2d7a5467f0d706f1fe3a862e11265df4aea5126
|
|
| MD5 |
ab09c61323f27e216c3b58b3aec0eeb4
|
|
| BLAKE2b-256 |
866e77a3743ff532f7ae10e52fed9eac65cb1a3465af2a9c10cf55d9697f5467
|
File details
Details for the file pygametool_rui-0.1.2-py3-none-any.whl.
File metadata
- Download URL: pygametool_rui-0.1.2-py3-none-any.whl
- Upload date:
- Size: 57.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7b94df39ae4bff1f5cf89b18980c0ab5c6b50dc557196b0c0878483c3e825835
|
|
| MD5 |
ee24fc214c956eedb9f055e84ca12dc7
|
|
| BLAKE2b-256 |
cc3d3cfed8f03fbf631f65ecc3407c7c1e559528c6962dfb1b76c24ea57e4b0b
|