EP07 · 讲义
Genesis2000 Python 脚本实战 · 第7集 GuiClasses——脚本与操作员对话
本集学什么
这集讲交互。学完你能写出人机协作的脚本:开始前弹窗收参数,关键节点弹窗确认,出错弹窗报原因。 为什么脚本需要界面?自动化不等于无人化——确认料号、补录参数、选择选项,都要人来拍板。
回顾:错误弹窗已是老熟人
- 第 6 集:40+ 处 warningbox 错误弹窗
第 6 集看过 JobClasses 里四十多处错误弹窗,用的就是这集要讲的封装。 这集把弹窗、表单、控件三件套逐一拆开——先看用法,再看设计细节。
定位与底座
import PyQt5
- 1774 行 · 三类封装:弹窗 / 表单 / 控件
- 脚本嵌在 Genesis 里跑,弹出原生风格窗口
GuiClasses 基于 PyQt5,封装了三类东西:标准弹窗、输入表单、样式化控件。 为什么 Genesis 的 Python 脚本要自带界面?因为脚本嵌在 Genesis 里跑,弹出原生风格的窗口,操作员才不会觉得陌生。
弹窗族四件套
- warningbox 警告
- infobox 信息
- errorbox 错误
- questionbox 询问
- 置顶显示 · 中文按钮 · 统一配色 · HTML 排版长文本
先看弹窗族。警告、信息、错误、询问,四种场景四个方法,用法一致:传标题和内容就行。 细节是统一的:置顶显示、中文按钮、统一配色。错误框还用 HTML 排版内容,长文本也不乱。
questionbox 的预设按钮
询问框有个贴心的设计:预设按钮组合。比如解锁和上锁两个选项,直接传对应参数,按钮就摆好了。 这类「业务动作两选一」的交互很常见,预设组合省掉每次拼按钮的代码。
输入三层次
- inputbox 单行输入
- multi_field_box 多栏位表单
- com_edit_path_box 路径选择
输入类封装了三个层次:单行输入一个框;多栏位表单一个字典定义全部字段;输入框旁边再加路径选择按钮。 从简单到复杂,各取所需。
多栏位表单的字段字典(完整结构)
字段 = { "默认值": ..., "项目": [...], # 下拉选项
"限制": 正则, "控件": "输入框/下拉框/勾选框"
}
多栏位表单的字段字典值得细看:每个字段四样配置——默认值、下拉项目、正则限制、控件类型。 用正则做输入校验,从源头挡住非法字符。一个字典定义一张表单,参数收集的需求基本都被覆盖。
样式化控件
- 多选下拉框(三版迭代)
- 深色系样式重写
- 冻结首行首列表格
控件层面也做了不少定制。多选下拉框有三个版本——支持全选、只读显示,一路迭代过来的。 标准控件统一重写成深色系样式;表格支持冻结首行首列,看长列表不迷路。
仅中文输入框
- ChineseOnlyValidator 自定义验证器
- 非法字符直接输不进去
还有个细节控件:仅允许中文的输入框。做法是自定义验证器,非法字符直接输不进去。 校验前置到输入环节,比事后检查再报错省事得多——这种小封装很见功力。
脚本 + GUI 协作模式
- 弹窗收参数
- → 执行任务
- → 关键节点确认
- → 完成弹结果
- 第 6 集 40+ 处错误弹窗正是这个模式
- 人机配合是自动化落地的最后一公里
把这些拼起来,就是脚本与 GUI 协作的标准模式:开始前弹窗收集参数,执行中关键节点弹窗确认,完成后弹结果。 第 6 集那四十多处错误弹窗,用的正是这个模式。人机配合,是自动化落地的最后一公里。
与 PAUSE / MOUSE 的分工
- 弹窗 = 问人拿参数
- PAUSE = 等人在 Genesis 里操作
- MOUSE = 点选位置拿坐标
- 问答靠弹窗,等待靠 PAUSE,取点靠 MOUSE
界面交互还有另一半,在第 2 集讲过的 PAUSE 和 MOUSE:弹窗是脚本问人要参数,PAUSE 是等人在 Genesis 里完成操作,MOUSE 是点选位置拿坐标。 三套交互分工清楚:问答靠弹窗,等待靠 PAUSE,取点靠 MOUSE。写交互式脚本时,先想清楚用哪一种。
使用案例巡览
Gui.warningbox(mess='提示内容') # 警告弹窗
Gui.inputbox('请输入料号') # 单行输入Gui.questionbox(mess='确认执行?', def_but=['确认','取消'])
- 摘自包内 docstring「使用例子」原文
- 下一集:SqlClasses 与 db_manager 数据库
最后看真实用法。警告弹窗、单行输入、带预设按钮的询问框——三行代码,三种交互。 下一集看数据层:这些弹窗背后要读写的数据,都存在数据库里。远程业务库和本地配置库,两套封装怎么设计。
小结与预告
- 弹窗 + 表单 + 控件,交互三件套
- 参数有默认,错误有人管
- 下一集:SqlClasses 与 db_manager 数据库
这一集我们看到:界面封装让脚本从「无人值守」变成「人机协作」,参数有默认、错误有人管。 下一集看数据层:远程业务库和本地配置库,两套数据库封装是怎么设计的。
零壹AI工作室出品 · 《用 Python 驱动 Genesis2000》免费公开课 · www.binwindai.com