实验任务预备队列管理器
该代码定义了几个自定义的GUI控件类,包括基础窗口小部件、框架、主窗口以及带有自动完成功能的组合框和自定义的文本编辑控件。这些控件通过继承PyQt6的基本控件类,并添加了一些自定义的功能来实现。
概要
该代码定义了用于管理和展示队列(Queue)和准备站(PrepStation)表格的模型。模型指定了表格数据的形式(如字典或列表),以及如何展示和操作这些数据,包括如何获取、设置和删除数据,以及如何排序数据。模型可以直接从数据集中读取数据,并在数据集发生更改时自动更新表格。
主要类和功能
_SyncSubstruct
此类定义了用于操作表格数据字典的方法。方法包括添加、插入、弹出、设置、删除和获取字典项。这个类主要是为了便于在模型中更新数据字典,并在数据更新时调用回调函数来通知模型。
DictSyncModel
这是一个基类,用于将字典(backing_store
)转换为表格。模型可以读取和编辑字典中的数据,并根据需要更新表格显示。其主要功能包括:
- 初始化模型,设置表头、数据名称和初始数据。
- 获取行数和列数。
- 获取和设置单元格数据。
- 获取表头数据。
- 插入和删除字典项。
- 排序和转换数据。
关键方法
rowCount
: 返回字典中的条目数。columnCount
: 返回列的数量,即表头的数量。data
: 根据索引和角色获取数据。setData
: 设置单元格数据,并根据需要进行类型转换。headerData
: 获取表头数据。__setitem__
: 插入或更新字典项,并更新表格显示。__delitem__
: 删除字典项,并更新表格显示。__getitem__
: 获取字典项。sort_key
: 定义排序键(由子类实现)。convert
: 将字典键转换为列数据(由子类实现)。flags
: 定义单元格的属性(由子类实现)。
ScheduleModel
这是用于管理实验队列的表格模型。数据结构是一个字典,每个字典代表一个实验任务。任务按优先级和任务编号排序。
关键方法
sort_key
: 返回用于排序的键,首先按优先级排序,然后按任务编号排序。convert
: 将字典键转换为列数据,特别是将日期时间字符串转换为QDateTime
对象。flags
: 定义可编辑和不可编辑的列。
ListSyncModel
类似于 DictSyncModel
,但处理的是列表而不是字典。主要用于管理需要按顺序排列的数据集合。
关键方法
rowCount
: 返回列表的长度。columnCount
: 返回列的数量。data
: 根据索引和角色获取数据。setData
: 设置单元格数据,并根据需要进行类型转换。headerData
: 获取表头数据。__delitem__
: 删除列表项,并更新表格显示。__getitem__
: 获取列表项。sort_key
: 定义排序键(由子类实现)。convert
: 将列表项转换为列数据(由子类实现)。flags
: 定义单元格的属性(由子类实现)。
PrepModel
这是用于准备站的表格模型,使用列表来管理任务,因为准备站中的任务不需要唯一的 ID,可以自由更改顺序。
关键方法
convert
: 将列表项转换为列数据,特别是将日期时间字符串转换为QDateTime
对象。flags
: 定义可编辑和不可编辑的列。
功能特点
- 数据同步:模型可以同步更新数据字典或列表,并通知表格更新显示。
- 数据排序:模型可以根据指定的键对数据进行排序。
- 数据转换:模型可以根据列索引转换数据类型,如将日期时间字符串转换为
QDateTime
对象。 - 数据编辑:模型支持在表格中编辑数据,并将更改反映到原始数据集合中。
- 表格属性:模型可以定义哪些列是可编辑的,哪些是只读的。
运行流程
- 创建模型实例,传入初始数据。
- 模型通过
rowCount
和columnCount
方法告知表格数据的大小。 - 表格通过
data
方法获取单元格数据并显示。 - 当用户编辑表格时,模型通过
setData
方法更新数据集合。 - 模型通过发射信号通知表格数据已更改,表格自动更新显示。