实验时间线查看器

该代码实现了一个实验时间线查看器,通过图形用户界面(GUI)来显示和控制实验时间序列。使用PyQt6库来构建界面,其中包含按钮、文本框和绘图区域。代码主要包括三个类:TimelineTimelinePlotterSelectorWidget

类和方法

Timeline

Timeline 继承自 QMainWindow,实现了一个实验时间线查看器。

方法:

  • __init__(self, *args, **kwargs):初始化时间线查看器。

    • 设置窗口标题为"Timeline Viewer"。
    • 加载JSON文件中的实验序列。
    • 创建主窗口组件,包括文件加载区、绘图区和选择区。
    • 设置中央窗口部件。
  • plot_experimental_sequence(self, time_dict, init_vals=None):绘制实验时间序列。

    • 重置绘图区域。
    • 深拷贝时间序列字典。
    • 找到最大时间tmax
    • 为每个时间序列添加一个点,确保每个序列都在tmax结束。
    • 准备颜色。
    • 为每个选中的输出绘制折线图,并根据条件选择不同的颜色和填充方式。
  • load_file(self, filename):加载实验序列文件。

    • 读取JSON文件并解析实验序列。
    • 获取输出名称集合。
    • 构建时间序列字典。
    • 逆向设备数据库转换时间序列字典。
    • 更新选择器组件中的名称。
  • decode_ttl_bitmask(self, bitmask, command):解码TTL位掩码。

    • 将位掩码转换为二进制字符串。
    • 找到二进制字符串中的所有1的位置。
    • 根据命令生成TTL字典。
  • get_set_of_used_outputs(self, sequence):获取使用的输出集合。

    • 遍历实验序列,提取所有使用的输出名称。
  • construct_time_sequences(self, sequence, set_of_output_names):构建时间序列字典。

    • 创建时间序列字典结构。
    • 填充时间序列字典。
  • reverse_device_db_transformation(self, time_sequence_dict, device_db_path=workpath+'/configuration/'):逆向设备数据库转换时间序列字典。

    • 加载设备数据库。
    • 构建逆向映射字典。
    • 根据逆向映射字典转换时间序列字典中的名称和值。

TimelinePlotter

TimelinePlotter 继承自 GraphicsLayoutWidget,用于可视化实验序列。

方法:

  • __init__(self, sequence):初始化绘图组件。
    • 订阅属性。
    • 设置背景为白色。
    • 初始化绘图字典。

SelectorWidget

SelectorWidget 继承自 QFrame,用于选择要显示的实验序列。

方法:

  • __init__(self, parent=None, clear_name_dict=None):初始化选择器组件。

    • 创建主布局和按钮。
    • 创建滚动区域用于显示复选框。
  • get_names(self, clear_name_dict):获取并显示名称。

    • 获取清晰名称字典的键并排序。
    • 如果名称未变化,则直接返回。
    • 否则,更新滚动区域中的复选框。
  • select_all(self):全选复选框。

    • 将所有复选框设为选中状态。
  • deselect_all(self):取消全选复选框。

    • 将所有复选框设为未选中状态。

主函数

代码通过创建 QApplication 实例和 Timeline 窗口来执行,并启动应用程序的主循环。

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Timeline()
    window.setWindowIcon(QtGui.QIcon(workpath + '/balic/icons/time_line.png'))
    window.setWindowTitle('Timeline Viewer')
    window.show()
    sys.exit(app.exec())

代码执行

该代码通过命令行执行,创建一个Timeline对象,并显示实验时间线查看器窗口。