ANSA二次开发 BCGUI Examples 实战:把 Base URL 改到 TaoToken 跑通第一个脚本
1. ANSA 二次开发 BCGUI Examples 入门从脚本加载到回调跑通的最小闭环ANSA 二次开发里BCGUI 是绕不开的一块。它负责把脚本能力变成可交互的窗口让工程师点按钮、填输入框就能触发计算或数据处理。BCGUI Examples 则是官方给的一组蓝本覆盖了从最简单的窗口创建到列表视图、进度条、标签页容器等复杂交互。很多人第一次打开这些示例时代码能看懂但真要在本地跑起来、看到回调触发、确认日志输出中间总会卡在环境变量、脚本加载路径、Base URL 配置这些环节上。这篇内容面向的是刚接触 ANSA 二次开发、想用 BCGUI Examples 跑通第一个脚本的读者。我会以官方示例为蓝本把脚本加载、界面回调、调试输出这条最小闭环拆开给出可复制的环境变量与 Base URL 配置片段并附上逐步验证动作。如果你之前只写过 ANSA 的普通脚本没碰过 BCGUI那这篇正好可以跟着做。核心检索词先明确ANSA 二次开发、BCGUI Examples、脚本加载、回调函数、Base URL 配置。这几个词会贯穿全文也是你在搜索时最可能用到的组合。我试过把 BCGUI 示例直接丢进 ANSA 的脚本编辑器里运行结果窗口一闪而过或者回调函数根本没被调用。后来发现问题往往不在代码本身而在脚本加载方式和运行环境。BCGUI 的窗口对象需要正确的生命周期管理回调函数需要以字符串形式注册数据传递需要理解 BCSetUserDataKey 和 BCGetUserDataKey 的用法。这些细节在官方文档里分散在各处示例代码又省略了部分上下文所以第一次跑通需要一点耐心。下面我会先讲清楚 BCGUI Examples 到底能做什么、适合谁然后给出 TaoToken 的前置配置接着是可复制的配置片段和验证请求最后是常见报错排查。整个流程你可以在本地复现不需要额外的硬件或特殊权限。1.1 BCGUI Examples 能做什么适合谁BCGUI 是 ANSA 内置的 GUI 构建模块全称是 Basic Custom GUI。它提供了一组函数让你用脚本创建窗口、按钮、输入框、列表、进度条等控件。BCGUI Examples 则是官方随文档提供的一组示例脚本每个示例聚焦一个或几个控件的用法。从 excerpt 里可以看到第一个示例是伪代码的代码实现。要让一个 widget 显示出来必须调用 BCShow。BCShow 会递归调用子 widget 的显示逻辑所以只需要对顶层 BCWindow 调用一次 BCShow整个窗口树就会显示出来。BCWindowCreate 里的 BCOnExitDestroy 选项意味着窗口关闭时会被销毁另一个选项 BCOnExitHide 不推荐使用因为错误使用可能导致内存泄漏。第二个示例创建了一个带两个 BCLineEdit 和一个 BCPushButton 的窗口。上面的 BCLineEdit 接受 double 输入按下按钮时触发平方根计算结果写到下面的输出 BCLineEdit。BCPushButton 按下时把计算值打印到 Output 窗口。两个回调函数都把输出 BCLineEdit 作为数据传递。这里还提到了 BCSetUserDataKey 和 BCGetUserDataKey用于传递更多数据。第三个示例创建了一个 BCListView填充当前 ANSA 数据库里所有的 PSHELL。如果 PSHELL 太多会用 BCProgressBar 替代 BCLineEditPath 来显示进度处理完再换回来。这里用了 BCWidgetStack 来实现这个效果。列表项显示 visibility、Color、PID、Name、Element number、MID、FROZEN_ID。可见性可以通过复选框控制双击打开实体卡编辑右键从列表移除但不删除 PSHELL。Name 和 MID 可以通过列表修改MID 会校验有效性无效则恢复旧值并在 BCListViewInfoBox 显示警告。列表有多条件过滤器BCListView 本身放在 BCWidgetExpand 里可以扩展到全尺寸而不改变 BCWindow 大小。BCLineEditPath 在列表顶部用于加载新数据库触发列表更新。第四个示例演示了容器 widget 的用法比如 BCDrawerGrids、BCToolBoxes、BCTabWidgets。还演示了 widget 状态如何保存到当前 xml 文件并按需读取。BCWindow 的位置和大小是自动保存的。示例里创建了一个名为 AutoSavingSettings 的 BCWindow包含一个带两个标签的 BCTabWidget。第一个标签包含 BCToolBox第二个包含 BCButtonLineEdit、BCGridLayout、BCTextEdit 和 BCLabelTicker。只有第一个标签的 widget 状态可以保存到 xml所以 BCDialogButtonBox 里的两个额外按钮只在当前标签时启用。当前标签变化时BCWindow 的 BCCaption 会变但 BCName 必须唯一且不变因为所有设置都以这个名称保存到 xml。这些示例覆盖了 BCGUI 的核心用法窗口创建、控件布局、回调注册、数据传递、状态保存、列表操作、进度显示。适合的人群包括ANSA 二次开发初学者、需要给脚本加界面的工程师、想理解 BCGUI 回调机制的开发者。如果你已经能写 ANSA 脚本但想让脚本更好用、更易交付BCGUI 是值得投入时间的方向。1.2 为什么要把 Base URL 改到 TaoToken在 ANSA 二次开发里脚本本身是本地运行的但如果你想让脚本具备调用大模型的能力比如自动生成注释、智能补全、代码解释就需要一个稳定的 API 入口。TaoToken 提供的就是这样一个入口它兼容常见的 API 调用方式你可以把 Base URL 指向它然后用统一的 Key 来管理调用。把 Base URL 改到 TaoToken 的好处是你不需要在脚本里硬编码多个供应商的地址也不需要为每个模型单独配置。一个 Base URL一个 Key就能在 ANSA 脚本里调用不同的模型。对于 BCGUI Examples 来说这意味着你可以在回调函数里加入模型调用比如点击按钮后把输入框的内容发给模型把返回结果显示在输出框里。TaoToken 的 API 地址是 https://taotoken.net/api官网是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。你可以在官网注册后获取 API Key然后在环境变量或脚本配置里设置 Base URL 和 Key。需要注意的是TaoToken 是一个合法的 API 服务入口不是灰色中转。它的使用方式符合常规的 API 调用规范你只需要按照文档配置 Base URL 和 Key 即可。1.3 环境变量与 Base URL 配置片段在 ANSA 脚本里你可以通过环境变量来管理 Base URL 和 API Key这样脚本本身不需要硬编码敏感信息。下面是一个可复制的配置片段你可以放在 ANSA 的启动脚本里或者放在系统的环境变量里。# ANSA 二次开发环境变量配置示例 import os # 设置 TaoToken 的 Base URL os.environ[TAOTOKEN_BASE_URL] https://taotoken.net/api # 设置 API Key实际使用时请替换为你自己的 Key os.environ[TAOTOKEN_API_KEY] sk-your-actual-key-here # 设置默认模型 ID os.environ[TAOTOKEN_MODEL_ID] claude-3-5-sonnet # 在脚本中读取 base_url os.environ.get(TAOTOKEN_BASE_URL) api_key os.environ.get(TAOTOKEN_API_KEY) model_id os.environ.get(TAOTOKEN_MODEL_ID) print(fBase URL: {base_url}) print(fModel ID: {model_id})如果你使用的是 JSON 配置文件可以这样写{ taotoken: { base_url: https://taotoken.net/api, api_key: sk-your-actual-key-here, model_id: claude-3-5-sonnet, timeout: 30 } }在 ANSA 脚本里读取 JSON 配置import json with open(taotoken_config.json, r, encodingutf-8) as f: config json.load(f) base_url config[taotoken][base_url] api_key config[taotoken][api_key] model_id config[taotoken][model_id]如果你用的是 TOML 格式[taotoken] base_url https://taotoken.net/api api_key sk-your-actual-key-here model_id claude-3-5-sonnet timeout 30读取 TOMLimport tomllib with open(taotoken_config.toml, rb) as f: config tomllib.load(f) base_url config[taotoken][base_url] api_key config[taotoken][api_key] model_id config[taotoken][model_id]这些配置片段可以直接复制到你的 ANSA 脚本项目里。注意把 api_key 替换成你自己的 Key不要提交到公开仓库。1.4 脚本加载与回调注册的最小闭环BCGUI 示例跑通的关键在于理解脚本加载和回调注册的流程。下面以第二个示例为蓝本给出一个最小闭环。首先创建一个 BCWindow并设置 BCOnExitDestroy# 创建 BCWindow window_name MyFirstBCGUI w BCWindowCreate(window_name, BCOnExitDestroy)然后创建两个 BCLineEdit 和一个 BCPushButton# 创建输入 BCLineEdit input_edit BCLineEditCreate(w, Input, ) # 创建输出 BCLineEdit output_edit BCLineEditCreate(w, Output, ) # 创建 BCPushButton button BCPushButtonCreate(w, Calculate, sqrt)接下来定义回调函数。回调函数是普通脚本函数名称以字符串形式传递给 BCGUI 函数def on_sqrt_pressed(data): # data 是传递进来的输出 BCLineEdit input_value BCLineEditGetText(input_edit) try: value float(input_value) result value ** 0.5 BCLineEditSetText(data, str(result)) except ValueError: BCLineEditSetText(data, Invalid input) def on_print_pressed(data): # data 是传递进来的输出 BCLineEdit result BCLineEditGetText(output_edit) print(fCalculated value: {result})注册回调# 注册回调把 output_edit 作为数据传递 BCPushButtonSetFunction(button, on_sqrt_pressed, output_edit)注意BCPushButtonSetFunction 的第二个参数是回调函数名的字符串第三个参数是用户数据。回调函数被调用时会收到这个用户数据作为参数。最后调用 BCShow 显示窗口BCShow(w)完整的脚本如下# ANSA BCGUI 最小闭环示例 window_name MyFirstBCGUI w BCWindowCreate(window_name, BCOnExitDestroy) input_edit BCLineEditCreate(w, Input, ) output_edit BCLineEditCreate(w, Output, ) button BCPushButtonCreate(w, Calculate, sqrt) def on_sqrt_pressed(data): input_value BCLineEditGetText(input_edit) try: value float(input_value) result value ** 0.5 BCLineEditSetText(data, str(result)) except ValueError: BCLineEditSetText(data, Invalid input) BCPushButtonSetFunction(button, on_sqrt_pressed, output_edit) BCShow(w)把这段脚本保存为 .py 文件在 ANSA 里通过脚本编辑器加载运行。如果一切正常你会看到一个窗口里面有输入框、输出框和按钮。在输入框里输入一个数字点击按钮输出框会显示平方根结果。1.5 验证请求与成功结果确认跑通第一个 BCGUI 示例后你需要确认回调确实被触发、日志确实有输出。下面给出逐步验证动作。第一步确认窗口显示。运行脚本后ANSA 界面应该弹出一个名为 MyFirstBCGUI 的窗口。如果窗口没有出现检查 BCShow 是否被调用以及 window_name 是否唯一。第二步确认回调触发。在输入框里输入 16点击 Calculate 按钮。输出框应该显示 4.0。如果输出框没有变化检查 BCPushButtonSetFunction 的注册是否正确回调函数名是否拼写正确。第三步确认日志输出。在 ANSA 的 Output 窗口里你应该能看到脚本的 print 输出。如果看不到检查 ANSA 的日志级别设置或者把 print 换成 ANSA 的日志函数。第四步确认 Base URL 配置生效。如果你在脚本里加入了模型调用可以在回调函数里打印 base_url 和 model_id确认读取正确。def on_sqrt_pressed(data): print(fBase URL: {os.environ.get(TAOTOKEN_BASE_URL)}) print(fModel ID: {os.environ.get(TAOTOKEN_MODEL_ID)}) input_value BCLineEditGetText(input_edit) try: value float(input_value) result value ** 0.5 BCLineEditSetText(data, str(result)) except ValueError: BCLineEditSetText(data, Invalid input)运行后Output 窗口应该显示 Base URL 和 Model ID。如果显示为空检查环境变量是否设置正确。第五步确认窗口关闭行为。按 Escape 或点击关闭按钮窗口应该被销毁。如果窗口隐藏了但进程还在检查 BCWindowCreate 的选项是否为 BCOnExitDestroy。1.6 常见报错排查在跑 BCGUI Examples 的过程中你可能会遇到一些报错。下面列出几个常见的。报错一401 Unauthorized。如果你在脚本里调用了模型 API但返回 401说明 API Key 无效或未设置。检查环境变量 TAOTOKEN_API_KEY 是否设置Key 是否过期。报错二local proxy failed。这个报错通常出现在网络配置层面。检查你的 Base URL 是否指向 https://taotoken.net/api不要有多余的路径或参数。报错三reading choices 相关错误。如果你在解析模型返回的 JSON 时遇到 reading choices 报错说明返回结构不符合预期。检查请求的 model_id 是否正确以及 API 版本是否匹配。报错四OAuth 相关错误。如果你使用了 OAuth 认证方式检查 token 是否过期刷新 token 的流程是否正确。报错五回调函数未定义。如果点击按钮后报错说回调函数未定义检查函数名是否与注册时的字符串一致函数是否在注册之前定义。报错六窗口名称重复。如果创建窗口时报错说名称重复检查是否有其他窗口使用了相同的 BCName。BCWindow 的名称必须唯一。报错七内存泄漏。如果窗口关闭后内存没有释放检查是否使用了 BCOnExitHide 而不是 BCOnExitDestroy。官方强烈建议使用 BCOnExitDestroy。报错八BCListView 不更新。如果修改了数据但列表没有刷新检查是否在修改后调用了列表更新函数或者是否在正确的时机触发了更新。1.7 接入文档与 API Keys 获取如果你还没有 TaoToken 的 API Key可以访问 API Keys 页面获取https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。获取后按照上面的配置片段设置环境变量。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content里面有详细的 API 调用说明和参数列表。你可以对照文档确认 Base URL、请求头、请求体的格式。如果你需要长期在 ANSA 里做编码和 Agent 相关的开发可以考虑 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。它提供了更适合持续编码场景的配置方式。如果你想先验证模型是否可用可以直接在模型对话页面测试https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。输入一段文本看看返回是否正常。控制台在 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content你可以在这里管理 Key、查看用量、调整配置。1.8 把 BCGUI 示例扩展成实用工具跑通第一个示例后你可以基于 BCGUI Examples 扩展出更实用的工具。比如把第三个示例的 BCListView 改造成一个 PSHELL 批量重命名工具或者把第四个示例的标签页容器用来组织多个功能模块。扩展时注意几点回调函数尽量保持简短复杂逻辑放到单独的函数里数据传递优先使用 BCSetUserDataKey 和 BCGetUserDataKey避免全局变量窗口名称保持唯一避免冲突状态保存依赖 BCName不要随意修改。如果你在扩展过程中遇到问题可以回到官方示例对照看看对应的控件用法。BCGUI 的函数命名比较规范BC 开头后面跟控件名和操作名比如 BCLineEditCreate、BCPushButtonSetFunction、BCListViewAddItem。熟悉这个命名规律后查文档会快很多。最后记得把配置文件和脚本分开管理不要把 API Key 硬编码在脚本里。用环境变量或配置文件读取这样脚本可以安全地分享和版本控制。

相关新闻

ICMP原始套接字实现Tracert路由追踪原理与VC6实战

ICMP原始套接字实现Tracert路由追踪原理与VC6实战

简介:这份Tracert程序设计报告面向计算机网络课程学习者与网络编程初学者,围绕原始套接字编程与ICMP协议展开,帮助读者理解路由跟踪的底层原理并完成课程设计或实验报告撰写。资源包共1个doc文档,约194KB,内容涵盖设计…

2026/10/5 10:59:59 阅读更多 →
云游戏端到端确定性调度与动态ABR技术实践指南

云游戏端到端确定性调度与动态ABR技术实践指南

简介:本报告是面向游戏产业从业者、AI与云计算技术研究者及数字文娱领域决策者的权威行业分析资料,聚焦云游戏这一5G时代关键落地场景,系统解答产业现状、区域差异、技术瓶颈与元宇宙演进路径等核心问题。资源为单文件PDF,共1个6.…

2026/10/4 10:34:13 阅读更多 →
Ceph MON命令实战:从状态查看到仲裁恢复的运维指南

Ceph MON命令实战:从状态查看到仲裁恢复的运维指南

去年冬天处理过一次 MON 节点全挂的事故,从无从下手到一步步把集群拉回来,让我意识到一个问题:很多 Ceph 相关文档都在讲存储池、RBD、CRUSH,但专门把 MON 命令系统梳理一遍的几乎没有。而 MON 恰恰是集群的命门,仲裁一…

2026/10/5 11:53:31 阅读更多 →

最新新闻

隔离内网AI Agent落地方案:从模型选型到并发压测全指南

隔离内网AI Agent落地方案:从模型选型到并发压测全指南

把 AI Agent 推进隔离内网的时候,我最直观的感受是:网上那些 Agent 演示项目,到了内网几乎没有一个能直接跑起来。这不是代码写得不行,而是它们默认的世界里什么都有——模型权重从 HuggingFace 拉、Python 依赖从 PyPI 装、搜索工…

2026/10/5 14:40:16 阅读更多 →
本地部署大模型:Token自由与数据主权的成本交叉点

本地部署大模型:Token自由与数据主权的成本交叉点

1. 从一张显卡账单说起:为什么企业开始重新算这笔账去年底帮一家做工业质检的客户做技术选型,他们的场景很典型:每天要处理大约两万张缺陷样本图,每张图都要过一遍多模态模型做描述生成和分类打标。一开始走的是公有云API&#xf…

2026/10/5 14:40:16 阅读更多 →
Windows下TensorFlow GPU版安装指南:CUDA与cuDNN版本匹配全解析

Windows下TensorFlow GPU版安装指南:CUDA与cuDNN版本匹配全解析

1. 写在动手之前:TensorFlow GPU版本没那么玄,坑全在版本匹配TensorFlow装GPU版本,十个新手九个在环境上翻车。这活儿本身不复杂,但坑全藏在版本匹配里:显卡驱动、CUDA、cuDNN、Python、TensorFlow本体,五个…

2026/10/5 14:40:16 阅读更多 →
Windows安装TensorFlow GPU版全攻略:CUDA/cuDNN版本匹配与报错排查

Windows安装TensorFlow GPU版全攻略:CUDA/cuDNN版本匹配与报错排查

Windows上装TensorFlow GPU版,说实话不算难,但坑是真的多。很多朋友卡在最后一步,pip install成功,import的时候直接报错,日志里全是什么cudart64_110.dll、cublas64_11.dll找不到,一看就是CUDA和cuDNN版本…

2026/10/5 14:40:15 阅读更多 →
Python登录接口实战:从密码加密到Session/Token登录态保持

Python登录接口实战:从密码加密到Session/Token登录态保持

做登录接口,算是Python后端入门里最典型、也最容易被低估的一个练习。项目名里带着“携程登陆”,说明不少人是想拿真实网站当靶子练手,这个思路没错,但我的建议是:先别急着去模拟别人家的登录,先自己用Pyth…

2026/10/5 14:40:15 阅读更多 →
零售数仓实战:促销敏感度与评论敏感度建模全解析

零售数仓实战:促销敏感度与评论敏感度建模全解析

做了不少零售行业的数仓项目,说实话,像“促销敏感度”和“评论敏感度”这类需求,几乎每个做电商或品牌方数据团队都会接到。老板们通常不会直接说“我要建个模型”,而是扔过来几个很现实的问题:为什么这波满减发出去&a…

2026/10/5 14:39:14 阅读更多 →

日新闻

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 0:00:22 阅读更多 →
AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

1. 从“plugins”这个词说起:它到底在解决什么问题如果你最近在折腾 AI 编程工具,尤其是 Cursor、Codex CLI、Claude Code 这类带 CLI 的编辑器或命令行助手,那你大概率绕不开一个词——plugins。这个词本身不新鲜,从浏览器到 IDE…

2026/10/5 0:00:23 阅读更多 →
第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 0:00:23 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 5:06:42 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 1:10:22 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 3:06:17 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 11:40:45 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 20:14:29 阅读更多 →