实验任务循环管理器
该代码定义了几个自定义的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
:解析文本,转换为特定格式。