当前位置: 首页 > article >正文

PythonStudio 控件使用常用方式(三十三)THotKey 实战:自定义快捷键绑定与冲突处理

1. THotKey控件你的快捷键管家在PythonStudio里捣鼓桌面应用给菜单项或者按钮绑定个快捷键是不是觉得挺酷的以前你可能得自己写一堆监听键盘事件的代码判断Ctrl、Alt、Shift这些修饰键还得处理各种按键组合想想都头大。现在好了PythonStudio从1.2.1版本开始给我们带来了一个神器——THotKey控件。这玩意儿说白了就是个“快捷键记录器”。你把它往窗体上一放用鼠标点一下让它获得焦点然后直接在键盘上按你想设置的组合键比如CtrlS它立马就能给你显示出来。直观吧不用你再去解析什么键盘码也不用担心记不住Ctrl键对应的是哪个虚拟键值。对于咱们做Python GUI开发的来说尤其是用PythonStudio这种基于Delphi VCL架构的工具THotKey让快捷键功能变得跟搭积木一样简单。我刚开始用的时候也觉得挺神奇一个控件就能搞定快捷键的输入、显示和读取。它位于工具箱的“Win32”分类下拖出来就是个小小的编辑框样子。但你可别小看它它背后关联着一整套热键管理的逻辑。不过这里有个重要的概念需要先拎清楚THotKey控件本身并不拦截系统快捷键。什么意思呢就是说你在这个控件里设置了CtrlS它不会让你的CtrlS保存文件功能失效。它的核心工作是“记录”和“提供”一个热键值至于这个值怎么用、用在哪里、会不会和系统冲突那是咱们开发者需要处理的事情。这既是它的灵活之处也是我们需要特别注意的地方。2. 核心属性详解从HotKey到Modifiers要玩转THotKey得先摸透它的几个关键属性。这些属性在对象检查器里都能直接设置当然用代码动态控制会更灵活。2.1 HotKey属性快捷键的“值”HotKey属性是THotKey最核心的属性它代表了这个控件当前记录或设置的快捷键值。这个值是一个特殊格式的整数在Delphi里是TShortCut类型PythonStudio已经帮我们封装好了我们可以直接把它赋值给其他控件的ShortCut属性比如菜单项。在对象检查器里你可以直接点开HotKey属性旁边的下拉箭头里面预置了很多常见的组合键像CtrlC、CtrlV、F1到F12等等直接选就行特别方便。但更多时候我们是通过用户交互来动态设置的。这时候就需要让THotKey控件获得焦点然后让用户直接按键。用户按下CtrlAltDelete当然这个系统级的一般不让设或者ShiftF1控件上就会显示出对应的键名。用代码来设置也很直观# 假设你的THotKey控件实例名叫 self.HotKey1 # 设置一个初始的热键比如 CtrlN self.HotKey1.HotKey 16462 # 这是CtrlN对应的值但通常我们不直接记数字 # 更常见的做法是从另一个已有的快捷键赋值或者清空 self.HotKey1.HotKey 0 # 清空热键不过直接记数字太不友好了。在实际项目中我更喜欢先让控件获得焦点引导用户去按然后读取这个HotKey值。这里有个小坑像Esc、Enter、Backspace这些特殊功能键THotKey默认是不让单独设置为热键的因为容易和对话框的默认行为冲突它更倾向于记录Ctrl/Alt/Shift 字母/数字/功能键这样的组合。2.2 InvalidKeys属性给快捷键设个“禁区”InvalidKeys属性是个集合类型的属性用来指定哪些“修饰键组合”是不允许被记录的。这功能太有用了主要是用来避免和一些非常常用、或者有特殊意义的系统组合键冲突。打开对象检查器点开InvalidKeys你会看到一串选项hcNone,hcShift,hcCtrl,hcAlt,hcCtrlAlt等等。如果勾选了hcCtrl那么当用户在控件里按下Ctrl字母时控件就只会记录下那个字母键Ctrl会被忽略掉。同理勾选hcShiftShift字母就只记录字母。我举个例子你就明白了。假设你的应用里CtrlS已经被用来做“保存”了这是行业惯例用户也形成了肌肉记忆。你现在想给“另存为”也设个快捷键如果用户不小心又在THotKey里按了CtrlS你肯定不希望它被记录成“另存为”的快捷键吧这时候你就可以把hcCtrl加到InvalidKeys里。这样即使用户按了CtrlS控件也只会显示一个孤零零的“S”从源头上就避免了冲突。但是这里有个优先级规则如果HotKey属性已经预先设置了一个值比如通过代码设置了CtrlS那么即使InvalidKeys里包含了hcCtrl这个预先设置的CtrlS依然会正常显示和生效。InvalidKeys主要约束的是用户“实时输入”时的行为。这个设计很合理保证了程序初始配置的稳定性。2.3 Modifiers属性自动补全的“辅助键”Modifiers属性是另一个提升效率的神器。它也是一个集合包含hkShift、hkCtrl、hkAlt、hkExt扩展键通常指Windows键这几个选项。它的作用是“自动补全”。比如你把hkCtrl设置为True。然后用户在THotKey控件里仅仅按了一下字母A没有按任何Ctrl、Alt、Shift控件显示出来的结果会是CtrlA相当于THotKey自动帮你加上了Ctrl这个修饰键。这个功能在打造一套统一快捷键风格的软件时特别有用。比如你规定所有功能快捷键都以Ctrl开头那么就可以默认开启hkCtrl。用户设置快捷键时只需要按字母键清爽又统一。当然如果用户就是想设置一个不带Ctrl的单一功能键比如就一个F5那就要记得先把Modifiers里对应的项关掉。3. 实战动态绑定菜单快捷键光说不练假把式咱们来看一个最经典的实战场景让用户自定义菜单项的快捷键。想象一下你的软件有个“文件-打开”菜单默认没快捷键现在你想做个设置界面让用户自己指定。首先在窗体上拖放这些控件一个MainMenu主菜单一个THotKey控件再加一个Button比如叫“应用快捷键”。设计界面大概长这样MainMenu里至少有一个菜单项。核心代码就在按钮的点击事件里def Button1Click(self, Sender): # 将HotKey1控件中当前的热键值赋给主菜单第一个下拉菜单的第一个子项 self.MainMenu1.Items[0].Items[0].ShortCut self.HotKey1.HotKey这几行代码的信息量其实不小self.MainMenu1.Items[0]获取的是主菜单的第一个顶级菜单比如“文件”菜单。.Items[0]获取的是这个顶级菜单下的第一个子项比如“打开”。.ShortCut就是这个菜单项的快捷键属性。self.HotKey1.HotKey就是我们THotKey控件里记录的最新热键值。一赋值菜单项旁边立刻就会显示出对应的快捷键文字比如“CtrlO”。而且之后用户只要按下这个组合键就会触发该菜单项的OnClick事件跟你直接在菜单设计器里设置快捷键效果一模一样。这里我分享一个我踩过的坑记得处理空值。如果用户把THotKey控件里的内容清空了比如按退格键那么self.HotKey1.HotKey读出来可能是0或者一个空值。直接赋给ShortCut可能会导致菜单显示异常。稳妥的做法是加个判断def Button1Click(self, Sender): hotkey_value self.HotKey1.HotKey if hotkey_value and hotkey_value ! 0: # 简单的有效性检查 self.MainMenu1.Items[0].Items[0].ShortCut hotkey_value else: # 可以清除菜单的快捷键或者给用户一个提示 self.MainMenu1.Items[0].Items[0].ShortCut 0 print(请输入有效的快捷键)4. 进阶热键冲突检测与处理方案用上了THotKey自定义快捷键是方便了但一个新的问题必然会出现冲突。用户设置的快捷键很可能跟你软件里其他地方的快捷键重复或者跟操作系统的全局快捷键比如CtrlAltDelete、WinD冲突甚至和用户自己其他软件的快捷键打架。4.1 如何发现冲突PythonStudio的THotKey控件本身没有内置冲突检测功能这需要我们自己来实现。思路其实不复杂主要分两步第一步收集“已占用”的热键列表。在你的应用初始化时遍历所有已经设置了快捷键的控件主要是TAction、TMenuItem等把它们的ShortCut属性值收集到一个列表或集合里。这个列表就是你的“内部占用清单”。第二步在用户设置时进行比对。当用户在THotKey控件里按下按键或者点击“应用”按钮时读取self.HotKey1.HotKey的值然后去你的“内部占用清单”里查找。如果找到了就说明和已有的某个功能冲突了。这里有个代码片段可以参考# 假设我们有一个列表来存储所有已使用的快捷键值 self.used_hotkeys [] # 在窗体初始化时收集菜单、按钮动作等的快捷键 def collect_used_hotkeys(self): self.used_hotkeys.clear() # 遍历主菜单的所有项这里需要递归遍历所有子项 for i in range(self.MainMenu1.Items.Count): menu_item self.MainMenu1.Items[i] self._collect_from_menu_item(menu_item) # 还可以遍历其他有ShortCut属性的控件比如TActionList中的Action def _collect_from_menu_item(self, item): if item.ShortCut and item.ShortCut ! 0: self.used_hotkeys.append(item.ShortCut) # 递归处理子菜单 if item.Count 0: for i in range(item.Count): self._collect_from_menu_item(item.Items[i]) # 在应用快捷键前进行检查 def apply_hotkey_with_check(self, new_hotkey_value, target_menu_item): if new_hotkey_value in self.used_hotkeys: # 冲突了找到是哪个功能占用了这个键 conflict_name self.find_conflict_name(new_hotkey_value) # 提示用户让用户决定是覆盖还是重新输入 reply messagebox.askyesno(快捷键冲突, f此快捷键已被 [{conflict_name}] 占用。\n是否要覆盖) if not reply: return False # 用户取消 # 如果用户选择覆盖可以先清除原功能的快捷键 self.clear_hotkey_from_list(new_hotkey_value) # 没有冲突或用户同意覆盖则应用新快捷键 target_menu_item.ShortCut new_hotkey_value self.used_hotkeys.append(new_hotkey_value) # 更新占用列表 return True4.2 处理系统级和外部冲突内部冲突好办外部冲突就比较棘手了。我们很难完全知道用户系统里其他软件用了哪些全局热键。一个比较实用的策略是告知与规避。告知在你的设置界面用文字提示用户一些众所周知的、强烈不建议使用的系统快捷键比如CtrlAltDelete、AltF4、WinE等。甚至可以提供一个“常见冲突键位”列表。规避利用好InvalidKeys属性。如果你明确不希望用户使用某些修饰键组合比如CtrlAltShift三键齐按容易误操作就可以提前在InvalidKeys里禁掉它们。提供重置/恢复默认功能这是用户体验的底线。一定要有一个“恢复默认设置”的按钮当用户把快捷键设得一塌糊涂时能一键回到初始状态。4.3 使用Modifiers和InvalidKeys进行智能约束Modifiers和InvalidKeys这两个属性其实是预防冲突的第一道防线。通过精心配置它们可以引导用户设置出更合理、冲突更少的快捷键。比如一个常见的配置方案是# 我们希望快捷键以Ctrl或Alt开头不鼓励使用单纯的Shift因为Shift字母经常用于输入大写字母 self.HotKey1.Modifiers [] # 先清空不自动补全让用户自由输入 # 但我们禁止使用CtrlAlt这种容易和系统冲突的组合也禁止单独的Shift self.HotKey1.InvalidKeys [hkShift, hcCtrlAlt] # 假设这些是有效的集合项这样配置后用户如果尝试输入ShiftA控件只会显示A尝试输入CtrlAltS可能只会显示S或CtrlS取决于hcCtrlAlt和hcCtrl的具体设置。这就从输入端减少了一些潜在的冲突键位。5. 封装与最佳实践打造健壮的快捷键管理模块在实际项目中我很少会直接在各个窗体的按钮事件里写死快捷键的处理逻辑。更好的做法是封装一个统一的快捷键管理类。这个类负责所有热键的注册、冲突检测、持久化保存到配置文件和加载。这个管理类的核心职责可以包括注册(Register)接收一个热键值来自THotKey和一个回调函数尝试将其注册为全局热键如果需要或控件热键。注册前执行冲突检查。注销(Unregister)当功能禁用或快捷键修改时安全地移除之前注册的热键。持久化(Persistence)将用户自定义的快捷键字典格式如{“action_open”: 16463}保存到ini或json配置文件中。加载(Load)启动时从配置文件加载并自动应用到对应的菜单或按钮上。冲突解决(Conflict Resolution)提供一套UI流程当检测到冲突时提示用户是“覆盖”、“交换”还是“取消”。这里给出一个非常简化的管理类框架抛砖引玉class HotkeyManager: def __init__(self): self.registered_hotkeys {} # 格式: {hotkey_value: {action_id: open, handler: func}} self.config_file settings.ini def register_hotkey(self, hotkey_value, action_id, handler_func): 注册一个热键 if hotkey_value in self.registered_hotkeys: # 冲突处理逻辑可以返回冲突信息或调用解决流程 return False, f与 [{self.registered_hotkeys[hotkey_value][action_id]}] 冲突 # 这里可以调用Windows API注册全局热键需要额外模块如pywin32 # 或者只是存储起来在菜单的OnClick事件里判断 self.registered_hotkeys[hotkey_value] { action_id: action_id, handler: handler_func } # 更新菜单显示等 return True, 注册成功 def save_to_config(self): 保存到配置文件 config {} for hk, info in self.registered_hotkeys.items(): config[info[action_id]] hk # 使用Python标准库configparser或json写入self.config_file # ... 写入操作 ... def load_from_config(self): 从配置文件加载并应用 # ... 读取操作 ... # 遍历配置为每个action_id找到对应的菜单项设置其ShortCut并调用register_hotkey # ... 应用操作 ... # 在窗体中使用 class MyForm: def __init__(self): self.hotkey_mgr HotkeyManager() self.hotkey_mgr.load_from_config() # ... 其他初始化 ... def on_apply_hotkey_click(self, Sender): new_hk self.HotKey1.HotKey success, msg self.hotkey_mgr.register_hotkey(new_hk, action_open, self.open_file) if not success: messagebox.showwarning(提示, msg) else: self.hotkey_mgr.save_to_config()最后再分享几个我总结的“血泪”经验给用户反馈当用户按下一个键时除了THotKey控件自身显示最好在旁边用Label实时显示易懂的提示比如“当前快捷键CtrlS”。支持单键功能键F1到F12、Pause、PrintScreen等键是很好的快捷键候选通常冲突少。确保你的THotKey和逻辑能正确处理它们。国际化考虑快捷键的描述文字如“CtrlS”可能需要根据系统语言环境变化虽然THotKey显示的是英文键名但你在UI提示上要做好本地化。测试测试测试在你的软件里把所有可能的快捷键组合都试一遍特别是和常用软件浏览器、聊天工具、输入法一起用时看看有没有奇怪的干扰。THotKey控件虽然小但把它用好了能极大提升你软件的专业度和用户体验。尤其是在做面向专业用户或可高度定制化的工具软件时一套灵活、健壮、可自定义的快捷键系统绝对是加分项。希望这些实战经验和代码片段能帮你少走些弯路。如果在使用过程中遇到更具体的问题硅量实验室的官方论坛是个好去处那里有很多热心的开发者和官方技术支持。

相关文章:

PythonStudio 控件使用常用方式(三十三)THotKey 实战:自定义快捷键绑定与冲突处理

1. THotKey控件:你的快捷键管家 在PythonStudio里捣鼓桌面应用,给菜单项或者按钮绑定个快捷键,是不是觉得挺酷的?以前你可能得自己写一堆监听键盘事件的代码,判断Ctrl、Alt、Shift这些修饰键,还得处理各种按…...

企业网络卡顿疑难排查:从症状到解决方案的全流程解析

1. 从“莫名其妙”的卡顿说起:企业网络间歇性卡顿的典型症状 你有没有遇到过这种情况?办公室里,大家正热火朝天地工作,突然有人喊了一句:“网又卡了!”紧接着,抱怨声此起彼伏:“网页…...

立创天空星ODrive扩展板:双路无刷电机驱动与SimpleFOC/ODrive框架实战

立创天空星ODrive扩展板:双路无刷电机驱动与SimpleFOC/ODrive框架实战 最近在做一个机器人关节项目,需要同时精确控制两个无刷电机,既要力矩平稳,又要位置准确。市面上现成的驱动板要么太贵,要么功能单一,于…...

一键检测:实时手机检测-通用模型,轻松识别图像中的手机

一键检测:实时手机检测-通用模型,轻松识别图像中的手机 前言: 你有没有遇到过这样的场景?整理手机相册时,想快速找出所有包含手机的图片;或者在一个复杂的监控画面里,需要立刻定位出手机的位置。…...

拖延症福音!AI论文工具 千笔AI VS 文途AI,专科生写作神器

随着人工智能技术的迅猛发展,AI辅助写作工具已逐渐成为高校学生完成毕业论文的重要帮手。越来越多的专科生开始借助这些智能工具来提升写作效率、降低写作难度,尤其是在面对开题报告、文献综述、正文撰写等复杂环节时,AI工具的价值愈发凸显。…...

Flutter 三方库 deno_postgres_interop 的鸿蒙化适配指南 - 跨越边界的数据库桥梁、在鸿蒙端实现 Deno 与 Postgres 互操作实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net Flutter 三方库 deno_postgres_interop 的鸿蒙化适配指南 - 跨越边界的数据库桥梁、在鸿蒙端实现 Deno 与 Postgres 互操作实战 前言 在进行 Flutter for OpenHarmony 的全栈开发或是构建…...

基于Cursor与CMake的STM32现代化开发工作流:从零搭建到一键调试

1. 为什么你需要这套现代化开发工作流? 如果你还在用 Keil 或者 IAR 开发 STM32,每次新建工程都要重复配置一堆路径,代码补全慢半拍,换个电脑或者操作系统就得重头再来,那我猜你肯定想过:“有没有更爽一点的…...

Flutter 三方库 dart_dotenv 的鸿蒙化适配指南 - 配置隔离的指挥官、在鸿蒙端实现多环境安全解耦实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net Flutter 三方库 dart_dotenv 的鸿蒙化适配指南 - 配置隔离的指挥官、在鸿蒙端实现多环境安全解耦实战 前言 在进行 Flutter for OpenHarmony 的企业级应用开发时,我们经常需要…...

NHSE技术指南:从问题解决到创意实现的动物森友会存档编辑全攻略

NHSE技术指南:从问题解决到创意实现的动物森友会存档编辑全攻略 【免费下载链接】NHSE Animal Crossing: New Horizons save editor 项目地址: https://gitcode.com/gh_mirrors/nh/NHSE 一、问题导入:突破动物森友会的机制限制 1.1 玩家的常见困…...

如何突破《原神》帧率限制?genshin-fps-unlock工具的技术解析与应用指南

如何突破《原神》帧率限制?genshin-fps-unlock工具的技术解析与应用指南 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 问题溯源:为何帧率限制成为游戏体验的隐形…...

PCB阻焊工艺全解析:从油墨选择到关键工序优化

1. 阻焊工艺:不只是“绿油”那么简单 很多刚接触PCB设计的朋友,可能都和我当初一样,觉得电路板上的那层“绿油”就是个背景板,选个颜色而已。直到我第一次打样回来的板子,在焊接时发生了好几处不该有的桥连&#xff0c…...

BurpSuit实战:SQL注入漏洞的17种攻击手法全解析

1. 从零开始:认识Burp Suite与SQL注入 如果你刚开始接触Web安全,可能会觉得Burp Suite和SQL注入这两个词听起来有点吓人。别担心,我刚开始学的时候也是一头雾水,感觉像在看天书。但实际用起来你会发现,Burp Suite其实就…...

金融理财系列课程

金融理财系列课程 财企分析系列课程 01什么是年报(半年报、季报等) 02掌握资产负债表 03掌握企业利润表 04掌握现金流量表 05通过财报了解企业 理财与金融系列课程 01 投资原则 02投资指数基金的计算方法 03投资股票的计算方法 04投资债券的计算方法…...

小红书内容采集开源工具完全指南:从入门到精通

小红书内容采集开源工具完全指南:从入门到精通 【免费下载链接】XHS-Downloader 免费;轻量;开源,基于 AIOHTTP 模块实现的小红书图文/视频作品采集工具 项目地址: https://gitcode.com/gh_mirrors/xh/XHS-Downloader 在数字…...

电机控制进阶1 - SVPWM算法在工业伺服系统中的实战解析

1. 从理论到实战:为什么工业伺服离不开SVPWM? 大家好,我是老张,在工业自动化这行摸爬滚打了十几年,从最早用分立元件搭驱动板,到现在玩转各种高端伺服驱动器,电机控制这块算是踩过不少坑。今天咱…...

Dify从入门到精通(一)——Docker Compose一键部署实战

1. 为什么选择Docker Compose部署Dify? 如果你对AI应用开发感兴趣,但又觉得从零开始搭建大模型环境、处理各种依赖和配置太麻烦,那Dify的出现简直就是福音。我自己刚开始接触LLM应用时,光是环境配置就折腾了好几天,各种…...

【Unity进阶技巧】打造无边框透明窗口:实现桌面悬浮工具与宠物应用

1. 为什么你需要一个“看不见”的窗口? 如果你用过一些桌面小工具,比如一个始终显示在屏幕角落的简约时钟,或者一个会在你桌面上跑来跑去的可爱宠物,你可能会好奇:它们是怎么做到“悬浮”在所有窗口之上,而…...

毕业设计实战:基于YOLOv8/v5/v11的PCB缺陷智能检测系统(Python+PyQt5)

1. 项目开篇:为什么选择PCB缺陷检测作为你的毕业设计? 如果你正在为计算机视觉或人工智能相关的毕业设计选题发愁,觉得人脸识别、车辆检测这些题目太“卷”了,那我强烈建议你看看PCB缺陷智能检测这个方向。这绝对是一个能让你脱颖…...

集合竞价数据处理差异解析:同花顺与通达信的bar逻辑对比

1. 集合竞价数据:一个被忽视的“隐形”Bar 如果你做过量化交易,尤其是高频一点的策略,肯定没少跟K线图打交道。一根根红红绿绿的柱子,记录着价格的开、高、低、收和成交量,这就是我们常说的Bar数据。但不知道你有没有注…...

ONLYOFFICE连接器(Connector)实战指南:从基础API到业务系统深度集成

1. 为什么你需要关注ONLYOFFICE连接器? 如果你正在开发OA、CRM或者知识库这类需要处理文档的业务系统,那你肯定遇到过这样的头疼事:用户想在系统里直接编辑个Word、Excel或者PPT,你得想办法集成一个在线编辑器。市面上选择不少&am…...

实战演练:基于快马平台从ER图到生成可运行API的教务管理系统

最近在做一个教务管理系统的原型开发,深刻体会到从数据库设计到接口实现这个过程的繁琐。画ER图、写建表SQL、再手动搭建后端框架……每个环节都得花不少时间。不过,这次我尝试用了一个新方法,借助InsCode(快马)平台,直接把设计好…...

AI新手村:我妈问我什么是OpenClaw,什么是养虾,我一文讲清

OpenClaw 到底是什么?它是一种全新的 AI,不是 ChatGPT 那种只会跟你聊天的机器人,是真能上手帮你干活的那种 AI ,行业里管它叫 AI Agent,也就是智能体。那跟 ChatGPT 到底有什么不一样?说实话,区…...

某大厂员工吐槽:我一个月加班20H+,被上级警告加班太少!

某大厂研究所员工爆料,自己一个月加班近20个小时,却被同事警告“加班太少”。评论区更有人表示,20小时确实不多,他们那里都是60至70小时起步。这条帖子看似在比较时长,实则撕开了职场中一种扭曲的价值观:当…...

便携式NFC检测枪设计:基于ESP32-C3与MFRC522的工业级读卡终端

1. 项目概述本项目是一款面向现场巡检、资产识别与门禁验证场景的便携式NFC检测枪,核心功能为非接触式读取ISO/IEC 14443-A标准的MIFARE Classic、MIFARE Ultralight及NTAG系列标签,并通过低功耗蓝牙(BLE)将原始UID、ATQA、SAK及可…...

ResNet与ViT在图像特征提取中的核心差异:卷积与自注意力机制的比较

1. 从“看”图片到“理解”图片:两种截然不同的思维方式 如果你刚开始接触计算机视觉,可能会觉得把一张图片扔进模型,然后它就能告诉你图片里是猫是狗,这事儿挺神奇的。但模型内部到底是怎么“看”这张图的?这背后其实…...

Ubuntu系统SMBus Host Controller报错全面解析与修复指南

1. 从一次“开不了机”的恐慌说起:SMBus报错到底是什么? 那天早上,我像往常一样按下Ubuntu电脑的开机键,准备开始一天的工作。屏幕亮起,熟悉的GRUB引导菜单一闪而过,紧接着,一行刺眼的黄字跳了出…...

【FPGA】基于DS18B20的单总线温度监测系统设计与实现

1. 从零开始:为什么选择FPGA和DS18B20来玩转温度监测? 如果你对电子DIY或者嵌入式开发感兴趣,肯定听说过温度传感器。市面上温度传感器种类繁多,有模拟的,有数字的,有复杂的,也有简单的。但说到…...

聊聊汇川系列飞剪与追剪程序那些事儿

飞剪程序 追剪程序plc程序伺服程序 汇川系列 带注释 触摸屏程序 飞剪程序、追剪程序plc程序伺服程序 几年前的飞剪追剪程序,用的都是汇川系列。 包含详细的注释、触摸屏程序、plc程序、伺服参数设 置和图纸,实际当中的应用 在工业自动化领域,…...

3个步骤打造个性化PDF阅读体验:Zotero Style视觉定制指南

3个步骤打造个性化PDF阅读体验:Zotero Style视觉定制指南 【免费下载链接】zotero-style zotero-style - 一个 Zotero 插件,提供了一系列功能来增强 Zotero 的用户体验,如阅读进度可视化和标签管理,适合研究人员和学者。 项目地…...

Zotero Style开源工具:三步实现PDF阅读界面个性化配置

Zotero Style开源工具:三步实现PDF阅读界面个性化配置 【免费下载链接】zotero-style zotero-style - 一个 Zotero 插件,提供了一系列功能来增强 Zotero 的用户体验,如阅读进度可视化和标签管理,适合研究人员和学者。 项目地址:…...