SliderPy
SliderPy 是一个开箱即用、自动布局、支持持久化、跨平台兼容的 tkinter 滑动条管理器,让你用几行代码就能构建专业级的参数调节界面。 基于 tkinter,SliderPy 无需额外依赖即可直接运行。
🌟 核心功能亮点
- 一键创建滑动条
- 通过 add_slider/add_sliders/add_slider_group/add_slider_groups 快速添加带标签的滑块
- 支持整数、浮点数(通过 resolution 控制精度)
- 滑块名称自动显示在标签上,实时更新当前值
- 自动窗口布局管理
- ✅ 自动调整窗口高度:每添加一个滑块,窗口自动伸缩以完美包裹内容
- ✅ 固定宽度 + 禁止手动拉伸:保持界面整洁统一
- ✅ 启动时自动居中:在屏幕中央打开,提升用户体验
- 灵活的事件回调
- 每个滑块可绑定独立回调函数,响应值变化
- 回调函数接收字符串值(符合 tkinter 规范),可自由处理
- 重置与恢复
- 🔁 重置为默认初始值:reset_all_sliders()
- 🔙 重置为最近保存的配置:reset_to_config()
- 配置持久化(JSON)
- 💾 保存当前参数到 JSON 文件
- 默认保存到用户目录:~/.slider_app/config.json(跨平台)
- 也支持手动选择保存路径
- 📂 从 JSON 加载配置
- 自动裁剪非法值到合法范围
- 提示缺失/多余参数
- 可选:将加载的配置设为下次启动默认值
- 启动自动恢复
- ✅ 程序启动时自动加载上次保存的配置
- 无需用户操作,参数状态无缝延续
- 配置文件不存在则静默跳过,无报错
- 安全与健壮性
- 🛡️ 防止重复滑块名称:添加时检查唯一性
- 🛡️ 值范围保护:加载或设置时自动 clamp 到 [from_, to]
- 🛡️ 异常处理:文件读写错误弹窗提示,不崩溃
- 🛡️ 中文支持:JSON 使用 ensure_ascii=False,支持中文参数名
- 开发者友好
- 📊 values属性:一键获取所有参数字典,便于调试或集成
- 🧱 面向对象封装:所有状态和方法集中管理,易于扩展
- 🧩 模块化设计:可轻松嵌入到更大项目中作为参数面板
- 用户交互体验
- 🖱️ 图形化文件选择对话框(保存/加载)
- 💬 操作成功/失败均有弹窗反馈
- 🎨 界面简洁清晰,标签+滑块垂直排列,一目了然
📦 典型应用场景
- 🎨 图像/视频处理软件的参数调节(亮度、对比度、饱和度…)
- 🎵 音频合成器或均衡器控制
- 🧪 科研实验中的超参数调试
- 🤖 机器人或仿真环境的实时控制面板
- 🛠️ 任何需要快速构建“数值调节 UI”的 Python 工具
🚀 快速开始
if __name__ == "__main__":
from pprint import pprint
import time
def on_brightness(val):
assert isinstance(val, int)
print(f"亮度变化: {val}")
def on_volume(val):
assert isinstance(val, float)
print(f"音量: {float(val):.2f}")
def on_target(val: dict):
for v in val.values():
assert isinstance(v, float)
print(f"目标变化: {val}")
def on_iter(val: tuple):
assert isinstance(val, tuple)
print(f"迭代器值: {val}")
return f"iter_result={val}"
app = SliderPy(base_width=500, config_path="./config.json")
# add sliders
sliders = (
SliderConfig("亮度", 0, 100, 1.0, 70, on_brightness),
SliderConfig("音量", 0, 1, 0.01, 0.6, on_volume),
SliderConfig("对比度", 50, 150, 1.0, 100),
SliderConfig("色温(K)", 2000, 10000, 100.0, 6500),
)
app.add_sliders(sliders)
# add slider group
app.add_slider_group(
"target",
(SliderConfig("X", 0, 1, 0.01), SliderConfig("Y", 0, 1, 0.01)),
on_target,
)
# add iter slider
app.add_iter_slider(
{i: f"Item {i}" for i in range(20)}.items(),
SliderConfig("iter", 0, 19, 1.0, 0, on_iter),
)
# finalize UI
app.finish_add()
# app.run() # blockingly run the app
pprint(app.values)
def periodic_task():
time.sleep(0.02) # 模拟其他任务
app.run(periodic_task)
pprint(app.results)
print("应用已关闭。")
Metadata
Release files for sliderpy 0.0.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| sliderpy-0.0.3.tar.gz | 9.2 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sliderpy-0.0.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 17.7 kB
Release files / sliderpy-0.0.3.tar.gz
| Download URL | sliderpy-0.0.3.tar.gz |
|---|---|
| Size | 9.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2313ddf42b9bee868952e4f4cf9ead742d13ed9c424f05b49ffe3d1cfff55698
|
|
BLAKE2b-256 checksum How to use checksums |
9194c5bec40705add718243b53dca0d31553dae7b32fd07c1ff1d145a5557a0e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.0.0 CPython/3.8.18
|
Release files / sliderpy-0.0.3-py3-none-any.whl
| Download URL | sliderpy-0.0.3-py3-none-any.whl |
|---|---|
| Size | 8.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f2165df0688a46f70fc9069c78da67a011d0e9d0de69851e4462a969181212c6
|
|
BLAKE2b-256 checksum How to use checksums |
1f232e6a66ca4503b0169f41b9950972a2dcb5af4cebcef8c661ec478bdff157
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.0.0 CPython/3.8.18
|
Security for sliderpy 0.0.3
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.