实验任务循环管理器
该代码定义了几个自定义的GUI控件类,包括基础窗口小部件、框架、主窗口以及带有自动完成功能的组合框和自定义的文本编辑控件。这些控件通过继承PyQt6的基本控件类,并添加了一些自定义的功能来实现。
代码结构
- 导入必要的模块和库
- 定义主要的
Looper类 - 定义
LoopItem类及其子类(TaskItem,ListItem,ConditionalItem等) - 定义辅助类(
DataManager,LoopManager,LoopGroup等) - 实现 GUI 部件和功能
类:Looper
简短功能介绍
Looper 类是整个循环控制的核心。它负责管理任务组、定时器、按钮和循环的启动与终止。
方法
__init__:初始化Looper对象,设置属性和布局,创建按钮和标签页。add_tab:添加新的任务组标签页。delete_tab:删除指定的任务组标签页。create_buttons:创建控制按钮。save_loop:保存当前循环配置。load_loop:加载之前保存的循环配置。terminate_by_time:根据时间自动终止循环。
类:LoopItem
简短功能介绍
LoopItem 类是所有循环项的基类,提供了基本的属性和方法。它被 TaskItem, ListItem, ConditionalItem 等类继承,并扩展其功能。
子类:TaskItem
- 功能:表示单个任务项,执行特定的任务并跟踪运行次数。
- 方法:
__init__:初始化任务项,设置任务信息和UI组件。run:执行任务,并将任务添加到任务队列。end_run:更新任务状态和运行次数。task_start:任务开始时的操作。task_end:任务结束时的操作。update_task:更新任务信息。max_check:检查是否达到最大运行次数。
子类:ListItem
- 功能:表示一个任务列表,按顺序执行列表中的任务。
- 方法:
__init__:初始化任务列表项,设置任务列表信息和UI组件。run:执行当前任务,并更新任务索引。end_run:更新任务列表状态和运行次数。edit_list:编辑任务列表。update_task_labels:更新任务标签。
子类:ConditionalItem
- 功能:表示条件项,根据条件的结果执行不同的任务。
- 方法:
__init__:初始化条件项,设置条件信息和UI组件。run:评估条件并选择下一步操作。update_boxes:更新条件的UI组件。
类:DataManager
简短功能介绍
DataManager 类管理数据订阅和更新,处理数据的接收和存储。
方法
__init__:初始化数据管理器,设置属性和数据客户端。set_new_data:处理新的数据,更新数据字典。edit_subscriptions:编辑数据订阅。
类:LoopManager
简短功能介绍
LoopManager 类负责管理循环的执行,处理循环任务的启动、终止和控制。
方法
__init__:初始化循环管理器,设置属性和线程池。loop_fn:循环执行函数,处理循环任务。run_loop:启动循环任务。terminate:终止循环任务。task_start:任务开始时的操作。task_end:任务结束时的操作。
类:LoopGroup
简短功能介绍
LoopGroup 类表示一个任务组,包含多个任务项和一个组项。
方法
__init__:初始化任务组,设置属性和布局。create_buttons:创建任务组的控制按钮。delete_group:删除任务组。update_loop_group_file:更新任务组配置文件。
类:Baustelle
简短功能介绍
Baustelle 类是任务组的编辑器,提供添加、删除和编辑任务项的功能。
方法
__init__:初始化编辑器,设置属性和布局。add_task_item:添加新的任务项。add_list_item:添加新的任务列表项。add_conditional:添加新的条件项。add_group_item:添加新的组项。update_idx:更新任务项的索引。
类:LoopSubMgr
简短功能介绍
LoopSubMgr 类是一个GUI,用于编辑数据流的订阅。
方法
__init__:初始化订阅管理器,设置属性和布局。update_subscriptions:更新数据流的订阅。
类:ListEdit
简短功能介绍
ListEdit 类是一个对话框,用于编辑 ListItem 的任务列表。
方法
__init__:初始化对话框,设置属性和布局。closeEvent:在对话框关闭时更新任务列表。
类:PrepBox 和 ListBox
简短功能介绍
PrepBox 和 ListBox 类分别用于显示和管理预备任务列表和当前任务列表。
方法
init_ui:初始化UI组件。set_model:设置数据模型。push_selection:将选中的任务添加到任务列表。unpack_selection:解包选中的任务并添加到任务列表。move_up:在任务列表中上移任务。move_down:在任务列表中下移任务。delete_clicked:删除选中的任务。
类:VLine
简短功能介绍
VLine 类用于在UI中创建分隔线。
类:LoopTabWidget 和 EditableTabBar
简短功能介绍
LoopTabWidget 和 EditableTabBar 类自定义了标签页控件,允许编辑标签页名称和管理标签页。
方法
addTab:添加新的标签页。setIconOn:设置标签页的图标为启用状态。setIconOff:设置标签页的图标为禁用状态。setTabText:设置标签页的文本。editTab:编辑标签页名称。
辅助函数
功能
get_experiment:获取实验对象。edit_key_in_place:编辑字典中的键。find_or_add:在组合框中查找或添加项目。parse_text:解析文本,转换为特定格式。