news 2026/5/1 6:51:53

Pelco KBD300A 模拟器:06.用 PyQt5 实现 1:1 像素级完美复刻 Pelco KBD300A 键盘

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Pelco KBD300A 模拟器:06.用 PyQt5 实现 1:1 像素级完美复刻 Pelco KBD300A 键盘

第 6 篇:用 PyQt5 实现 1:1 像素级完美复刻 Pelco KBD300A 键盘

真正的“永不磨损的实体键盘”诞生,Windows 7 完美运行,视觉与手感 99.9% 还原
发布时间:2025 年 12 月


一、背景与进化历程

在前五篇文章中,我们已经完成了从协议解析 → 链式调用类 → 基础 GUI的逐步演进。
今天正式发布终极形态:

一台可以直接替代真实 KBD300A 的软件键盘
连最挑剔的老工程师把真机摆在旁边都分不出来哪个是真的。

核心特性:

  • 像素级视觉还原:按钮圆角、边框、阴影与按下动画模拟实体键感。
  • 摇杆高精度模拟:鼠标拖动产生pan/tilt值,范围 (-127…127),自动回中。
  • LCD 七段显示与呼吸闪烁:2800ms 周期的微弱呼吸效果,支持缩放。
  • 响应式布局:基于基准窗口尺寸按比例缩放所有控件与字体。
  • 主题切换:暗色与浅色主题,数字键(0–9)随主题动态变色;C/E 键保留固定强调色以便快速识别。
  • 串口占位支持:可选pyserial集成,保留发送/接收占位点,便于后续实现 Pelco 协议发送。

二、关键代码

下面摘取关键片段,便于直接对照与复用。

样式生成函数
defbtn_style_template(bg_color,border_color,font_px,radius_px,border_w=4):returnf""" QPushButton {{ background:{bg_color}; color:{THEMES['current']['TEXT_PRIMARY']}; font: bold{font_px}px 'Arial'; border:{border_w}px outset{border_color}; border-radius:{radius_px}px; }} QPushButton:hover {{ background:{THEMES['current']['ACCENT_SOFT']}; }} QPushButton:pressed {{ border-style: inset; background: rgba(255,255,255,0.02); }} QPushButton:disabled {{ color: rgba(200,200,200,0.4); background: rgba(255,255,255,0.02); }} """
创建数字按键时的动态标记
# 在构建数字键时ifch.isdigit():default_bg='dynamic'# 动态背景,随主题变化elifch=="C":default_bg="#d9534f"# Clear 红(固定)elifch=="E":default_bg="#2ecc71"# Enter 绿(固定)btn.default_bg=default_bg# 初始样式initial_bg=THEMES['current']['BTN_BG']ifdefault_bg=='dynamic'elsedefault_bg btn.setStyleSheet(btn_style_template(initial_bg,THEMES['current']['BTN_BORDER'],28,14))
在 apply_theme / apply_scaling 中统一应用
# 在 apply_theme 或 apply_scaling 中forbtninself.num_buttons:ifgetattr(btn,'default_bg',None)=='dynamic':bg=THEMES['current']['BTN_BG']else:bg=btn.default_bg btn.setStyleSheet(btn_style_template(bg,THEMES['current']['BTN_BORDER'],font_size_num,radius_num))
AnimatedLCD 呼吸闪烁
classAnimatedLCD(QtWidgets.QLCDNumber):def__init__(self,digits=4,parent=None):super().__init__(digits,parent)self._font_px=28self.opacity=1.0self.timer=QtCore.QTimer(self)self.timer.timeout.connect(self.flicker)self.timer.start(2800)def_apply_theme(self):t=THEMES['current']style=f""" QLCDNumber {{ background:{t['LCD_BG']}; color:{t['ACCENT']}; border: 2px solid{t['LCD_BORDER']}; border-radius: 8px; padding: 6px; font: bold{self._font_px}px 'Consolas'; }} """self.setStyleSheet(style)defflicker(self):self.opacity=0.75ifself.opacity==1.0else1.0self._apply_theme()
RealJoystick 核心回调
classRealJoystick(QtWidgets.QWidget):pan_tilt_changed=QtCore.pyqtSignal(int,int)defmouseMoveEvent(self,e):ifself.dragging:vec=e.pos()-self.center length=(vec.x()**2+vec.y()**2)**0.5iflength>self._max_radiusandlength!=0:scale=self._max_radius/length vec=QtCore.QPoint(int(vec.x()*scale),int(vec.y()*scale))self.pos=self.center+vec self.update()pan=int(vec.x()/self._max_radius*127)tilt=int(-vec.y()/self._max_radius*127)self.pan_tilt_changed.emit(pan,tilt)

三、运行环境与要求

最低配置:

  • 操作系统:Windows 7 SP1(32/64 位均可)
  • Python:3.7.9
  • 依赖库:
    • PyQt5==5.15.2
    • pyserial

安装命令:

pipinstallPyQt5==5.15.2 pyserial

运行方式:

python KBD300A_main.py

打包命令:

pyinstaller--clean--noconfirm KBD300A_main.spec

打包版本文件:

# UTF-8 VSVersionInfo( ffi=FixedFileInfo( filevers=(1, 0, 0, 0), prodvers=(1, 0, 0, 0), mask=0x3f, flags=0x0, OS=0x40004, # Windows NT 32-bit fileType=0x1, subtype=0x0, date=(0, 0) ), kids=[ StringFileInfo([ StringTable( '080404b0', # 简体中文 [ StringStruct('CompanyName', '智码电子'), StringStruct('FileDescription', 'KBD300软键盘控制软件'), StringStruct('FileVersion', '1.0.0.0'), StringStruct('InternalName', 'kbd300_tool'), StringStruct('LegalCopyright', '版权所有 © 2025 我送炭你添花'), StringStruct('OriginalFilename', 'KBD300A_V1.0.exe'), StringStruct('ProductName', 'KBD300软键盘'), StringStruct('ProductVersion', '1.0.0.0') ] ) ]), VarFileInfo([ VarStruct('Translation', [0x0804, 1200]) ]) ] )

双击运行,即刻出现一台永不磨损、永不掉键的 Pelco KBD300A!


四、运行界面

暗色主题:

浅色主题:

五、资源

源代码和打包后的exe文件,请点击(稍后上传)

六、下篇预告

下一篇(第 7 篇)将带来更强大的功能:

《内置完整宏脚本编辑器 + 实时解释器 + 无限长度 Pattern 录制与单步调试》

届时,这台“软件键盘”将拥有原装 KBD300A 永远不可能具备的超级大脑

  • 支持for/while循环、条件判断、变量、延时、注释
  • 一键录制 → 自动生成可读脚本 → 无限次回放
  • 带语法高亮、单步调试、断点功能
    上一篇目录下一篇
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 20:56:50

s3fs-fuse终极指南:三步搞定云端存储本地挂载

s3fs-fuse终极指南:三步搞定云端存储本地挂载 【免费下载链接】s3fs-fuse FUSE-based file system backed by Amazon S3 项目地址: https://gitcode.com/gh_mirrors/s3/s3fs-fuse 还在为管理云端S3存储而烦恼吗?想要像操作本地文件一样轻松访问云…

作者头像 李华
网站建设 2026/5/1 5:46:52

Feishin音乐播放器:解决自托管音乐管理的三大核心痛点

Feishin音乐播放器:解决自托管音乐管理的三大核心痛点 【免费下载链接】feishin A modern self-hosted music player. 项目地址: https://gitcode.com/gh_mirrors/fe/feishin 还在为音乐库管理混乱而烦恼吗?Feishin作为现代化自托管音乐播放器&am…

作者头像 李华
网站建设 2026/4/18 10:41:17

5大核心技术:构建高可靠物联网数据处理管道的架构设计

5大核心技术:构建高可靠物联网数据处理管道的架构设计 【免费下载链接】thingsboard Open-source IoT Platform - Device management, data collection, processing and visualization. 项目地址: https://gitcode.com/GitHub_Trending/th/thingsboard 在当今…

作者头像 李华
网站建设 2026/5/1 5:48:36

【紧急更新】VSCode量子开发插件兼容性问题全面解决方案

第一章:VSCode 量子开发的插件集成现代量子计算开发正逐步走向标准化与可视化,Visual Studio Code(VSCode)凭借其强大的扩展生态,成为量子编程的首选集成环境。通过集成专用插件,开发者可在统一界面中完成量…

作者头像 李华
网站建设 2026/5/1 5:45:07

跨设备文件传输终极指南:简单免费解决你的数据同步难题

跨设备文件传输终极指南:简单免费解决你的数据同步难题 【免费下载链接】WindSend Quickly and securely sync clipboard, transfer files and directories between devices. 快速安全的同步剪切板,传输文件或文件夹 项目地址: https://gitcode.com/gh…

作者头像 李华
网站建设 2026/4/28 19:46:27

亏损23亿照样上市,从加密交易所HashKey香港IPO看到了什么?

一家两年亏损超23亿港元的公司,成功登陆港交所,定价接近区间上限,全球顶级金融机构用真金白银为它投票。这不是传统金融的故事,而是一场关于合规、技术与未来基础设施的价值重估。12月15日,持牌交易所HashKey完成港股I…

作者头像 李华