实验任务循环管理器

该代码定义了几个自定义的GUI控件类,包括基础窗口小部件、框架、主窗口以及带有自动完成功能的组合框和自定义的文本编辑控件。这些控件通过继承PyQt6的基本控件类,并添加了一些自定义的功能来实现。

代码结构

  1. 导入必要的模块和库
  2. 定义主要的 Looper
  3. 定义 LoopItem 类及其子类(TaskItem, ListItem, ConditionalItem 等)
  4. 定义辅助类(DataManager, LoopManager, LoopGroup 等)
  5. 实现 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

简短功能介绍

PrepBoxListBox 类分别用于显示和管理预备任务列表和当前任务列表。

方法

  • init_ui:初始化UI组件。
  • set_model:设置数据模型。
  • push_selection:将选中的任务添加到任务列表。
  • unpack_selection:解包选中的任务并添加到任务列表。
  • move_up:在任务列表中上移任务。
  • move_down:在任务列表中下移任务。
  • delete_clicked:删除选中的任务。

类:VLine

简短功能介绍

VLine 类用于在UI中创建分隔线。

类:LoopTabWidget 和 EditableTabBar

简短功能介绍

LoopTabWidgetEditableTabBar 类自定义了标签页控件,允许编辑标签页名称和管理标签页。

方法

  • addTab:添加新的标签页。
  • setIconOn:设置标签页的图标为启用状态。
  • setIconOff:设置标签页的图标为禁用状态。
  • setTabText:设置标签页的文本。
  • editTab:编辑标签页名称。

辅助函数

功能

  • get_experiment:获取实验对象。
  • edit_key_in_place:编辑字典中的键。
  • find_or_add:在组合框中查找或添加项目。
  • parse_text:解析文本,转换为特定格式。